Namespaces
Variants

std:: wcrtomb

From cppreference.net
Definido en el encabezado <cwchar>
std:: size_t wcrtomb ( char * s, wchar_t wc, std:: mbstate_t * ps ) ;

Convierte un carácter ancho a su representación multibyte estrecha.

Si s no es un puntero nulo, la función determina el número de bytes necesarios para almacenar la representación del carácter multibyte de wc (incluyendo cualquier secuencia de cambio, y teniendo en cuenta el estado actual de conversión multibyte * ps ), y almacena la representación del carácter multibyte en el arreglo de caracteres cuyo primer elemento está apuntado por s , actualizando * ps según sea necesario. Como máximo MB_CUR_MAX bytes pueden ser escritos por esta función.

Si s es un puntero nulo, la llamada es equivalente a std :: wcrtomb ( buf, L ' \0 ' , ps ) para algún búfer interno buf .

Si wc es el carácter ancho nulo L ' \0 ' , se almacena un byte nulo, precedido por cualquier secuencia de cambio necesaria para restaurar el estado de cambio inicial y el parámetro de estado de conversión * ps se actualiza para representar el estado de cambio inicial.

Contenidos

Parámetros

s - puntero al array de caracteres estrechos donde se almacenará el carácter multibyte
wc - el carácter ancho a convertir
ps - puntero al objeto de estado de conversión utilizado al interpretar la cadena multibyte

Valor de retorno

En caso de éxito, retorna el número de bytes (incluyendo cualquier secuencia de desplazamiento) escritos en el arreglo de caracteres cuyo primer elemento está apuntado por s .

En caso de fallo (si wc no es un carácter ancho válido), retorna static_cast < std:: size_t > ( - 1 ) , almacena EILSEQ en errno , y deja * ps en un estado no especificado.

Ejemplo

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
void print_wide(const std::wstring& wstr)
{
    std::mbstate_t state{};
    for (wchar_t wc : wstr)
    {
        std::string mb(MB_CUR_MAX, '\0');
        std::size_t ret = std::wcrtomb(&mb[0], wc, &state);
        std::cout << "multibyte char " << mb << " is " << ret << " bytes\n";
    }
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌"
    print_wide(wstr);
}

Salida:

multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 🍌 is 4 bytes

Véase también

convierte un carácter ancho a su representación multibyte
(función)
convierte el siguiente carácter multibyte a carácter ancho, dado un estado
(función)
[virtual]
convierte una cadena de InternT a ExternT , como al escribir a archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )