C ++ mbrtowc () - Biblioteca padrão C ++

A função mbrtowc () em C ++ converte um caractere multibyte estreito em um caractere largo (do tipo wchar_t).

A função mbrtowc () é definida no arquivo de cabeçalho.

protótipo mbrtowc ()

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

A função mbrtowc () converte o caractere multibyte representado por s em um caractere largo e é armazenado no endereço apontado por pwc.

  • Se s não for um ponteiro nulo, um máximo de n bytes começando do byte apontado por s são examinados a fim de determinar o número de bytes necessário para completar o próximo caractere multibyte (incluindo quaisquer sequências de deslocamento).
    Se o próximo caractere multibyte n em s for completo e válido, a função o converterá no caractere largo correspondente e será armazenado no local apontado por pwc.
  • Se s for um ponteiro nulo, os parâmetros n e pwc não têm nada a ver com a chamada de função e a chamada é equivalente a std::mbrtowc(NULL, "", 1, ps).
  • Se o caractere largo produzido for um caractere nulo, o estado de conversão armazenado em * ps é o estado de deslocamento inicial.

Parâmetros mbrtowc ()

  • pwc: Ponteiro para o endereço de memória onde o caractere largo convertido está armazenado.
  • s: ponteiro para o caractere multibyte a ser convertido.
  • n: Número máximo de bytes em s a examinar.
  • ps: Ponteiro para o estado de conversão usado ao interpretar a string multibyte

mbrtowc () Valor de retorno

A função mbrtowc () retorna o primeiro dos seguintes que é válido:

  • 0 se o caractere largo convertido de s for nulo (se pwc não for nulo).
  • O número de caracteres multibyte convertidos com êxito de s.
  • -2 se os próximos n bytes não representarem um caractere multibyte completo.
  • -1 se ocorre um erro de codificação, errno é definido como EILSEQ .

Exemplo: Como funciona a função mbrtowc ()?

 #include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = ""; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )

Quando você executa o programa, a saída será:

 Os próximos 1 byte (s) não representam um caractere multibyte completo Os próximos 5 bytes contêm 2 bytes de caracteres multibyte, o caractere largo resultante é µ O caractere largo convertido é um caractere largo nulo

Artigos interessantes...