C ++ mbrtowc () - Biblioteca estándar de C ++

La función mbrtowc () en C ++ convierte un carácter estrecho multibyte en un carácter ancho (de tipo wchar_t).

La función mbrtowc () se define en el archivo de encabezado.

prototipo mbrtowc ()

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

La función mbrtowc () convierte el carácter multibyte representado por sa un carácter ancho y se almacena en la dirección apuntada por pwc.

  • Si s no es un puntero nulo, se examinan un máximo de n bytes a partir del byte apuntado por s para determinar el número de bytes necesarios para completar el siguiente carácter multibyte (incluidas las secuencias de desplazamiento).
    Si el siguiente n carácter multibyte en s está completo y es válido, la función lo convierte al carácter ancho correspondiente y se almacena en la ubicación señalada por pwc.
  • Si s es un puntero nulo, los parámetros ny pwc no tienen nada que ver con la llamada a la función y la llamada es equivalente a std::mbrtowc(NULL, "", 1, ps).
  • Si el carácter ancho producido es un carácter nulo, el estado de conversión almacenado en * ps es el estado de cambio inicial.

Parámetros mbrtowc ()

  • pwc: puntero a la dirección de memoria donde se almacena el carácter ancho convertido.
  • s: puntero al carácter multibyte para convertir.
  • n: Número máximo de bytes en s para examinar.
  • ps: puntero al estado de conversión utilizado al interpretar la cadena multibyte

mbrtowc () Valor de retorno

La función mbrtowc () devuelve el primero de los siguientes que es válido:

  • 0 si el carácter ancho convertido de s es nulo (si pwc no es nulo).
  • El número de caracteres multibyte convertidos correctamente de s.
  • -2 si los siguientes n bytes no representan un carácter multibyte completo.
  • -1 si se produce un error de codificación, errno se establece en EILSEQ .

Ejemplo: ¿Cómo funciona la función 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; )

Cuando ejecute el programa, la salida será:

 El siguiente 1 byte (s) no representa un carácter multibyte completo Los siguientes 5 bytes contienen 2 bytes de carácter multibyte. El carácter ancho resultante es µ El carácter ancho convertido es un carácter ancho nulo

Articulos interesantes...