Namespaces
Variants

std:: wcrtomb

From cppreference.net
Definiert im Header <cwchar>
std:: size_t wcrtomb ( char * s, wchar_t wc, std:: mbstate_t * ps ) ;

Wandelt ein Breitzeichen in seine schmale Multibyte-Darstellung um.

Wenn s kein Nullzeiger ist, bestimmt die Funktion die Anzahl der Bytes, die notwendig sind, um die Multibyte-Zeichendarstellung von wc zu speichern (einschließlich aller Shift-Sequenzen und unter Berücksichtigung des aktuellen Multibyte-Konvertierungszustands * ps ), und speichert die Multibyte-Zeichendarstellung im Zeichenarray, dessen erstes Element durch s gezeigt wird, wobei * ps bei Bedarf aktualisiert wird. Diese Funktion kann maximal MB_CUR_MAX Bytes schreiben.

Wenn s ein Nullzeiger ist, entspricht der Aufruf std :: wcrtomb ( buf, L ' \0 ' , ps ) für einen internen Puffer buf .

Wenn wc das Null-Breitzeichen L ' \0 ' ist, wird ein Null-Byte gespeichert, dem ggf. eine Shift-Sequenz vorausgeht, die notwendig ist, um den initialen Shift-Zustand wiederherzustellen, und der Konvertierungszustandsparameter * ps wird aktualisiert, um den initialen Shift-Zustand darzustellen.

Inhaltsverzeichnis

Parameter

s - Zeiger auf ein schmales Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird
wc - das zu konvertierende Breitzeichen
ps - Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation der Multibyte-Zeichenkette verwendet wird

Rückgabewert

Bei Erfolg gibt die Anzahl der Bytes (einschließlich aller Schaltsequenzen) zurück, die in das Zeichenarray geschrieben wurden, dessen erstes Element durch s gezeigt wird.

Bei Fehler (falls wc kein gültiges Breitzeichen ist), gibt static_cast < std:: size_t > ( - 1 ) zurück, speichert EILSEQ in errno und belässt * ps in einem nicht näher spezifizierten Zustand.

Beispiel

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

Ausgabe:

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

Siehe auch

wandelt ein Breitzeichen in seine Multibyte-Darstellung um
(Funktion)
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion)
[virtual]
wandelt eine Zeichenkette von InternT zu ExternT um, beispielsweise beim Schreiben in eine Datei
(virtuelle geschützte Memberfunktion von std::codecvt<InternT,ExternT,StateT> )
C-Dokumentation für wcrtomb