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é.