std:: mbrtowc
|
Definido en el encabezado
<cwchar>
|
||
|
std::
size_t
mbrtowc
(
wchar_t
*
pwc,
const
char
*
s,
|
||
Convierte un carácter multibyte estrecho a un carácter ancho.
Si s no es un puntero nulo, inspecciona como máximo n bytes de la cadena de caracteres multibyte, comenzando por el byte apuntado por s para determinar el número de bytes necesarios para completar el siguiente carácter multibyte (incluyendo cualquier secuencia de desplazamiento). Si la función determina que el siguiente carácter multibyte en s está completo y es válido, lo convierte al carácter ancho correspondiente y lo almacena en * pwc (si pwc no es nulo).
Si s es un puntero nulo, los valores de n y pwc se ignoran y la llamada es equivalente a std :: mbrtowc ( nullptr, "" , 1 , ps ) .
Si el carácter ancho producido es el carácter nulo, el estado de conversión almacenado en * ps es el estado de desplazamiento inicial.
Contenidos |
Parámetros
| pwc | - | puntero a la ubicación donde se escribirá el carácter ancho resultante |
| s | - | puntero a la cadena de caracteres multibyte utilizada como entrada |
| n | - | límite en el número de bytes en s que pueden examinarse |
| ps | - | puntero al estado de conversión utilizado al interpretar la cadena multibyte |
Valor de retorno
La primera de las siguientes que aplique:
- 0 si el carácter convertido desde s (y almacenado en pwc si no es nulo) era el carácter nulo.
- el número de bytes [ 1 ... n ] del carácter multibyte convertido exitosamente desde s .
- static_cast < std:: size_t > ( - 2 ) si los siguientes n bytes constituyen un carácter multibyte incompleto, pero válido hasta el momento. No se escribe nada en * pwc .
- static_cast < std:: size_t > ( - 1 ) si ocurre un error de codificación. No se escribe nada en * pwc , el valor EILSEQ se almacena en errno y el valor de * ps queda sin especificar.
Ejemplo
#include <clocale> #include <cstring> #include <cwchar> #include <iostream> void print_mb(const char* ptr) { std::mbstate_t state = std::mbstate_t(); // estado inicial const char* end = ptr + std::strlen(ptr); int len; wchar_t wc; while ((len = std::mbrtowc(&wc, ptr, end-ptr, &state)) > 0) { std::wcout << "Siguientes " << len << " bytes son el carácter " << wc << '\n'; ptr += len; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // Codificación multibyte estrecha UTF-8 const char* str = "z\u00df\u6c34\U0001d10b"; // o u8"zß水𝄋" // o "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; print_mb(str); }
Salida:
Siguientes 1 bytes son el carácter z Siguientes 2 bytes son el carácter ß Siguientes 3 bytes son el carácter 水 Siguientes 4 bytes son el carácter 𝄋
Véase también
|
convierte el siguiente carácter multibyte a carácter ancho
(función) |
|
|
convierte un carácter ancho a su representación multibyte, dado un estado
(función) |
|
|
[virtual]
|
convierte una cadena de
ExternT
a
InternT
, como cuando se lee desde un archivo
(función miembro protegida virtual de
std::codecvt<InternT,ExternT,StateT>
)
|
|
Documentación de C
para
mbrtowc
|
|