Namensräume
Varianten
Aktionen

std::wcrtomb

Von cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
Definiert in Header <cwchar>
std::size_t wcrtomb( char* s, wchar_t wc, std::mbstate_t* ps );

Konvertiert ein Wide-Zeichen in seine schmale Mehrbyte-Darstellung.

Wenn s kein Nullzeiger ist, ermittelt die Funktion die Anzahl der Bytes, die zur Speicherung der Mehrbyte-Zeichenrepräsentation von wc benötigt werden (einschließlich aller Umschaltsequenzen und unter Berücksichtigung des aktuellen Mehrbyte-Konvertierungszustands *ps), und speichert die Mehrbyte-Zeichenrepräsentation im Zeichenarray, dessen erstes Element von s gezeigt wird, wobei *ps bei Bedarf aktualisiert wird. Höchstens MB_CUR_MAX Bytes können von dieser Funktion geschrieben werden.

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

Wenn wc das Null-Wide-Zeichen L'\0' ist, wird ein Null-Byte gespeichert, dem eine Umschaltsequenz vorangestellt ist, die erforderlich ist, um den initialen Umschaltzustand wiederherzustellen, und der Konvertierungszustandsparameter *ps wird aktualisiert, um den initialen Umschaltzustand darzustellen.

Inhalt

[bearbeiten] Parameter

s - Zeiger auf das schmale Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird
wc - das zu konvertierende Wide-Zeichen
ps - Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation des Multibyte-Strings verwendet wird

[bearbeiten] Rückgabewert

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

Bei Fehler (wenn wc kein gültiges Wide-Zeichen ist) wird static_cast<std::size_t>(-1) zurückgegeben, EILSEQ wird in errno gespeichert, und *ps verbleibt in einem nicht spezifizierten Zustand.

[bearbeiten] 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

[bearbeiten] Siehe auch

konvertiert ein Wide-Zeichen in seine Multibyte-Darstellung
(Funktion) [bearbeiten]
konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand
(Funktion) [bearbeiten]
[virtuell]
konvertiert eine Zeichenkette von InternT nach ExternT, z. B. beim Schreiben in eine Datei
(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) [edit]
C-Dokumentation für wcrtomb