La función mbrtowc() en C/C++ convierte la secuencia multibyte en caracteres anchos. Esta función devuelve la longitud en bytes de un carácter multibyte. El carácter multibyte señalado por s se convierte en un valor de tipo wchar_t y se almacena en la ubicación señalada por pwc. Si s apunta a un carácter nulo, la función restablece el estado de cambio y devuelve cero después de almacenar el carácter nulo ancho en pwc.
Sintaxis:
size_t mbrtowc (wchar_t* pwc, const char* pmb, size_t max, mbstate_t* ps)
Parámetro: La función acepta cuatro parámetros como se describe a continuación:
- pwc : puntero a la ubicación donde se escribirá el carácter ancho resultante
- s: puntero a la string de caracteres multibyte utilizada como entrada
- n : límite en el número de bytes en s que se pueden examinar
- ps: puntero al estado de conversión utilizado al interpretar la string multibyte
Valor devuelto: la función devuelve cuatro valores de la siguiente manera:
- Si, carácter ancho nulo o si pmb es un puntero nulo, la función devuelve 0
- el número de bytes [1…n] del carácter multibyte convertido con éxito de s
- Si los primeros caracteres máximos de pmb forman un carácter multibyte incompleto, la función devuelve longitud-2
- De lo contrario, la función devuelve longitud-1 y establece errno en EILSEQ
Nota: Ninguno de los valores posiblemente devueltos es menor que cero.
Los siguientes programas ilustran la función anterior:
Programa 1:
// C++ program to illustrate // mbrtowc() function #include <bits/stdc++.h> using namespace std; // Function to convert multibyte // sequence to wide character void print_(const char* s) { // initial state mbstate_t ps = mbstate_t(); // length of the string int length = strlen(s); const char* n = s + length; int len; wchar_t pwc; // printing each bytes while ((len = mbrtowc(&pwc, s, n - s, &ps)) > 0) { wcout << "Next " << len << " bytes are the character " << pwc << '\n'; s += len; } } // Driver code int main() { setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = u8"z\u00df\u6c34\U0001d10b"; print_(str); }
Next 1 bytes are the character z Next 2 bytes are the character Ã? Next 3 bytes are the character æ°´ Next 4 bytes are the character ð??
Programa 2:
// C++ program to illustrate // mbrtowc() function // with different UTF-8 characters #include <bits/stdc++.h> using namespace std; // Function to convert multibyte // sequence to wide character void print_(const char* s) { // initial state mbstate_t ps = mbstate_t(); // length of the string int length = strlen(s); const char* n = s + length; int len; wchar_t pwc; // printing each bytes while ((len = mbrtowc(&pwc, s, n - s, &ps)) > 0) { wcout << "Next " << len << " bytes are the character " << pwc << '\n'; s += len; } } // Driver code int main() { setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = u8"\xE2\x88\x83y\xE2\x88\x80x\xC2\xAC"; print_(str); }
Next 3 bytes are the character â?? Next 1 bytes are the character y Next 3 bytes are the character â?? Next 1 bytes are the character x Next 2 bytes are the character ¬
Publicación traducida automáticamente
Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA