Namespaces
Variants

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

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

Wandelt eine breite Sequenz in eine Byte-Zeichenkette um, unter Verwendung des durch cvtptr  referenzierten Facets.

1) Die breite Sequenz besteht nur aus einem Element byte .
2) Die breite Sequenz ist die nullterminierte Sequenz, die bei ptr beginnt.
3) Die breite Sequenz ist die in str enthaltene Sequenz.
4) Die breite Sequenz ist der Bereich [ first , last ) .

Bevor die Konvertierung beginnt, falls * this nicht mit Konstruktorüberladung (3) erstellt wurde, wird cvtstate auf seinen Standardwert (den anfänglichen Konvertierungszustand) gesetzt.

Die Anzahl der erfolgreich konvertierten Eingabeelemente wird in cvtcount gespeichert.

Inhaltsverzeichnis

Rückgabewert

Wenn die Konvertierung erfolgreich ist, gibt sie das Konvertierungsergebnis zurück. Andernfalls, wenn * this mit Konstruktor-Überladung (4) konstruiert wurde, gibt sie byte_err_string zurück.

Ausnahmen

Wenn die Konvertierung fehlschlägt und * this nicht nicht mit Konstruktorüberladung (4) erstellt wurde, wird std::range_error geworfen.

Beispiel

#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);
}

Ausgabe:

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

Siehe auch

wandelt eine Byte-Zeichenkette in eine Breitzeichen-Zeichenkette um
(öffentliche Elementfunktion)
wandelt eine Breitzeichen-Zeichenkette in eine schmale Multibyte-Zeichenkette um, mit Zustand
(Funktion)
[virtual]
wandelt eine Zeichenkette von InternT zu ExternT um, z.B. beim Schreiben in eine Datei
(virtuelle geschützte Elementfunktion von std::codecvt<InternT,ExternT,StateT> )