mbrtowc
Converta um caractere de vários byte no caractere largo equivalente.
size_t mbrtowc(
wchar_t *wchar,
const char *mbchar,
size_t count,
mbstate_t mbstate
);
Parâmetros
wchar
Endereço de um caractere largo para receber a seqüência de caracteres largos convertido (tipo de wchar_t). Esse valor pode ser NULL Se nenhum caractere largo de retorno for necessário.mbchar
Endereço de uma sequência de bytes (caractere multibyte).count
Número de bytes para verificar.mbstate
Estado de conversão.Se esse valor for nulo, uma categoria de estado interno de conversão é usada.
Valor de retorno
0
Se o próximo count ou menos bytes concluir caracteres multibyte que representa o NULL caractere largo.> 0
Se o próximo count ou menos bytes concluir um caractere válido de vários bytes, o valor retornado é o número de bytes que completar caracteres multibyte.-1
Se ocorrer um erro de codificação, que nesse caso o próximo count ou menos bytes não contribuem para os caractere multibyte completo e válido, o valor errno será EILSEQ e o estado de conversão ambíguo.-2
Se o próximo count bytes contribuem para um multibyte incompleta e contagem de todos os bytes tenham sido processados.
Comentários
If wcharis a NULL value, the function is equivalent to the call:
mbrtowc(NULL, NULL, 1, mbstate)
Nesse caso, o valor dos argumentos wchar e count são ignorados.
If wchar is not NULL, the function examines count bytes from mbcharto determine the required number of bytes needed to complete the next multibyte character.Se o próximo caractere for válido, os caracteres multibyte correspondente é armazenada no wchar Se não for nulo. Se o caractere for o caractere nulo ampla correspondente, o estado resultante é o estado inicial de conversão.
The mbrtowc função difere mbtowc, _mbtowc_l por sua capacidade de reinicialização. O estado de conversão é armazenado em mbstate para chamadas subseqüentes para o mesmo ou Outros funções reinicializáveis. Os resultados são indefinidos ao misturar o uso de funções nonrestartable e reinicializáveis.Por exemplo, um aplicativo utilize wcsrlen em vez de wcslen, se uma telefonar subseqüente para wcsrtombs Quando usado em vez de wcstombs.
Exemplo
Converte um caracteres multibyte em seu equivalente de caractere largo.
// 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);
}
Saída de exemplo
Locale set to: "French_Canada.1252"
Conversion succeeded!
Multibyte String: AaBbCcÜïα∩≡xXyYzZ
WC String: AaBbCcÜïα∩≡xXyYzZ
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
mbrtowc |
<wchar.h> |
Equivalente do NET Framework
Não aplicável. Para telefonar a função C padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.