std::wcrtomb
| 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) | |
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) | |
| [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>) |
| C-Dokumentation für wcrtomb
| |