Share via


mbrtowc

Convertissez un caractère multioctets dans le caractère élargi équivalent.

size_t mbrtowc(
   wchar_t *wchar,
   const char *mbchar,
   size_t count,
   mbstate_t mbstate
);

Paramètres

  • wchar
    Adresse d'un caractère élargi pour accepter la chaîne à caractères larges convertie (type wchar_t).Cette valeur peut être NULL si aucun caractère élargi de retour n'est requis.

  • mbchar
    Adresse d'une séquence d'octets (un caractère multioctets).

  • count
    Nombre d'octets à vérifier.

  • mbstate
    Rapport de conversion.Si cette valeur est NULL, une catégorie interne du rapport de conversion est utilisée.

Valeur de retour

  • 0
    Si count suivant ou moins octets finaliser le caractère multioctets qui représente le caractère élargi d' NULL .

  • > 0
    Si count suivant ou moins octets en un caractère multioctets valide, la valeur retournée est le nombre d'octets qui finaliser le caractère multioctets.

  • -1
    Si une erreur d'encodage se produit, dans ce cas count suivant ou moins octets ne fournissent pas au caractère multioctets terminé et valide, la valeur errno sera EILSEQ et le rapport de conversion ambiguë.

  • -2
    Si les octets suivants d' count contribuent à un multioctets incomplet et les octets de nombre ont été traités.

Notes

Si wcharest une valeur NULL, la fonction équivaut à l'appel :

mbrtowc(NULL, NULL, 1, mbstate)

dans ce cas, la valeur des arguments wchar et count sont ignorés.

Si wchar n'est pas nul, la fonction examine les octets d' count d' mbcharpour déterminer le nombre d'octets requis nécessaires pour compléter le caractère multioctets suivant.Si le caractère suivant est valide, le caractère multioctets correspondant est stocké dans wchar s'il n'est pas NULL.Si le caractère est le caractère NULL large correspondant, l'état résultant est le rapport de conversion initiale.

la fonction d' mbrtowc diffère de mbtowc, _mbtowc_l par sa capacité à redémarrer.Le rapport de conversion est stocké dans mbstate pour les appels suivants à la même transparence ou à d'autres fonctions restartable.Les résultats sont indéfinis en combinant l'utilisation des fonctions restartable et nonrestartable.Par exemple, une application utilise wcsrlen plutôt qu' wcslen, si un appel suivant à wcsrtombs où utilisé au lieu d' wcstombs.

Exemple

Convertit un caractère multioctets en son équivalent à caractères larges.

// crt_mbrtowc.cpp

#include <stdio.h>
#include <mbctype.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>

#define BUF_SIZE 100

int Sample(char* szIn, wchar_t* wcOut, int nMax)
{
    mbstate_t   state = {0}; // Initial state
    size_t      nConvResult, 
                nmbLen = 0,
                nwcLen = 0;
    wchar_t*    wcCur = wcOut;
    wchar_t*    wcEnd = wcCur + nMax;
    const char* mbCur = szIn;
    const char* mbEnd = mbCur + strlen(mbCur) + 1;
    char*       szLocal;
    
    // Sets all locale to French_Canada.1252
    szLocal = setlocale(LC_ALL, "French_Canada.1252");
    if (!szLocal)
    {
        printf("The fuction setlocale(LC_ALL, \"French_Canada.1252\") failed!\n");
        return 1;
    }

    printf("Locale set to: \"%s\"\n", szLocal);

    // Sets the code page associated current locale's code page
    // from a previous call to setlocale.
    if (_setmbcp(_MB_CP_SBCS) == -1)
    {
        printf("The fuction _setmbcp(_MB_CP_SBCS) failed!");
        return 1;
    }

    while ((mbCur < mbEnd) && (wcCur < wcEnd))
    {
        //
        nConvResult = mbrtowc(wcCur, mbCur, 1, &state);
        switch (nConvResult)
        {
            case 0:
            {  // done
                printf("Conversion succeeded!\nMultibyte String: ");
                printf(szIn);
                printf("\nWC String: ");
                wprintf(wcOut);
                printf("\n");
                mbCur = mbEnd;
                break;
            }

            case -1:
            {  // encoding error
                printf("The call to mbrtowc has detected an encoding error.\n");
                mbCur = mbEnd;
                break;
            }

            case -2:
            {  // incomplete character
                if   (!mbsinit(&state))
                {
                    printf("Currently in middle of mb conversion, state = %x\n", state);
                    // state will contain data regarding lead byte of mb character
                }

                ++nmbLen;
                ++mbCur;
                break;
            }

            default:
            {
                if   (nConvResult > 2) // The multibyte should never be larger than 2
                {
                    printf("Error: The size of the converted multibyte is %d.\n", nConvResult);
                }

                ++nmbLen;
                ++nwcLen;
                ++wcCur;
                ++mbCur;
            break;
            }
        }
    }

   return 0;
}

int main(int argc, char* argv[])
{
    char    mbBuf[BUF_SIZE] = "AaBbCc\x9A\x8B\xE0\xEF\xF0xXyYzZ";
    wchar_t wcBuf[BUF_SIZE] = {L''};

    return Sample(mbBuf, wcBuf, BUF_SIZE);
}

Résultat de l'exemple

Locale set to: "French_Canada.1252"
Conversion succeeded!
Multibyte String: AaBbCcÜïα∩≡xXyYzZ
WC String: AaBbCcÜïα∩≡xXyYzZ

Configuration requise

routine

en-tête requis

mbrtowc

<wchar.h>

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.

Voir aussi

Référence

Conversion de données

Paramètres régionaux

Interprétation des séquences de caractères multioctets