Namespaces
Variants

std::wstring_convert<Codecvt,Elem,Wide_alloc,Byte_alloc>:: to_bytes

From cppreference.net
Definido en el encabezado <locale>
byte_string to_bytes ( Elem wchar ) ;
(1)
byte_string to_bytes ( const Elem * wptr ) ;
(2)
byte_string to_bytes ( const wide_string & wstr ) ;
(3)
byte_string to_bytes ( const Elem * first, const Elem * last ) ;
(4)

Convierte una secuencia ancha a una cadena de bytes usando el facet apuntado por cvtptr .

1) La secuencia amplia solo consta de un elemento byte .
2) La secuencia ancha es la secuencia terminada en nulo que comienza en ptr .
3) La secuencia amplia es la secuencia contenida en str .
4) La secuencia amplia es el rango [ first , last ) .

Antes de que comience la conversión, si * this no fue no construido con la sobrecarga del constructor (3) , cvtstate se establecerá a su valor por defecto (el estado de conversión inicial).

El número de elementos de entrada convertidos exitosamente se almacenará en cvtcount .

Contenidos

Valor de retorno

Si la conversión tiene éxito, retorna el resultado de la conversión. De lo contrario, si * this está construido con la sobrecarga del constructor (4) , retorna byte_err_string .

Excepciones

Si la conversión falla y * this no fue construido con la sobrecarga del constructor (4) , lanza std::range_error .

Ejemplo

#include <codecvt>
#include <iomanip>
#include <iostream>
#include <locale>
#include <string>
// utility function for output
void hex_print(const std::string& s)
{
    std::cout << std::hex << std::setfill('0');
    for (unsigned char c : s)
        std::cout << std::setw(2) << static_cast<int>(c) << ' ';
    std::cout << std::dec << '\n';
}
int main()
{
    // wide character data
    std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌"
    // wide to UTF-8
    std::wstring_convert<std::codecvt_utf8<wchar_t>> conv1;
    std::string u8str = conv1.to_bytes(wstr);
    std::cout << "UTF-8 conversion produced " << u8str.size() << " bytes:\n";
    hex_print(u8str);
    // wide to UTF-16le
    std::wstring_convert<std::codecvt_utf16<wchar_t, 0x10ffff, std::little_endian>> conv2;
    std::string u16str = conv2.to_bytes(wstr);
    std::cout << "UTF-16le conversion produced " << u16str.size() << " bytes:\n";
    hex_print(u16str);
}

Salida:

UTF-8 conversion produced 10 bytes:
7a c3 9f e6 b0 b4 f0 9f 8d 8c 
UTF-16le conversion produced 10 bytes:
7a 00 df 00 34 6c 3c d8 4c df

Véase también

convierte una cadena de bytes en una cadena ancha
(función miembro pública)
convierte una cadena ancha en una cadena de caracteres multibyte estrecha, dado un estado
(función)
[virtual]
convierte una cadena de InternT a ExternT , como al escribir en un archivo
(función miembro protegida virtual de std::codecvt<InternT,ExternT,StateT> )