Namespaces
Variants

std:: mbtowc

From cppreference.net
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> )