std:: mbtowc
|
Definido en el encabezado
<cstdlib>
|
||
|
int
mbtowc
(
wchar_t
*
pwc,
const
char
*
s,
std::
size_t
n
)
;
|
||
Convierte un carácter multibyte cuyo primer byte está apuntado por s a un carácter ancho, escrito en * pwc si pwc no es nulo.
Si s es un puntero nulo, restablece el estado de conversión global y determina si se utilizan secuencias de desplazamiento.
Contenidos |
Parámetros
| s | - | puntero al carácter multibyte |
| n | - | límite en el número de bytes en s que pueden examinarse |
| pwc | - | puntero al carácter ancho para salida |
Valor de retorno
Si s no es un puntero nulo, devuelve el número de bytes contenidos en el carácter multibyte o - 1 si los primeros bytes apuntados por s no forman un carácter multibyte válido o 0 si s apunta al carácter nulo ' \0 ' .
Si s es un puntero nulo, restablece su estado de conversión interno para representar el estado de desplazamiento inicial y devuelve 0 si la codificación multibyte actual no depende del estado (no utiliza secuencias de desplazamiento) o un valor distinto de cero si la codificación multibyte actual depende del estado (utiliza secuencias de desplazamiento).
Notas
Cada llamada a
mbtowc
actualiza el estado de conversión global interno (un objeto estático de tipo
std::mbstate_t
, solo conocido por esta función). Si la codificación multibyte utiliza estados de cambio, se debe tener cuidado para evitar retrocesos o múltiples escaneos. En cualquier caso, múltiples hilos no deben llamar a
mbtowc
sin sincronización:
std::mbrtowc
puede usarse en su lugar.
Ejemplo
#include <clocale> #include <cstdlib> #include <cstring> #include <iostream> int print_mb(const char* ptr) { std::mbtowc(nullptr, 0, 0); // reset the conversion state const char* end = ptr + std::strlen(ptr); int ret{}; for (wchar_t wc; (ret = std::mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret) std::wcout << wc; std::wcout << '\n'; return ret; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = "z\u00df\u6c34\U0001d10b"; // or "zß水𝄋" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; print_mb(str); }
Salida:
zß水𝄋
Véase también
|
convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función) |
|
|
devuelve el número de bytes en el siguiente carácter multibyte
(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
mbtowc
|
|