std::mbtowc
| Definiert in Header <cstdlib> |
||
| int mbtowc( wchar_t* pwc, const char* s, std::size_t n ); |
||
Konvertiert ein Mehrbytezeichen, dessen erster Byte von s gezeigt wird, in ein Weitzeichen, geschrieben nach *pwc, wenn pwc nicht null ist.
Wenn s ein Nullzeiger ist, wird der globale Konvertierungszustand zurückgesetzt und ermittelt, ob Umschaltsequenzen verwendet werden.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf das Multibyte-Zeichen |
| n | - | Grenze für die Anzahl der Bytes in s, die untersucht werden können |
| pwc | - | Zeiger auf das Weitzeichen für die Ausgabe |
[edit] Rückgabewert
Wenn s kein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die im Mehrbytezeichen enthalten sind, oder -1, wenn die ersten Bytes, auf die von s gezeigt wird, kein gültiges Mehrbytezeichen bilden, oder 0, wenn s auf das Nullzeichen '\0' zeigt.
Wenn s ein Nullzeiger ist, wird sein interner Konvertierungszustand zurückgesetzt, um den anfänglichen Umschaltzustand darzustellen, und gibt 0 zurück, wenn die aktuelle Multibyte-Kodierung nicht zustandsabhängig ist (keine Umschaltsequenzen verwendet) oder einen Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Umschaltsequenzen verwendet).
[edit] Hinweise
Jeder Aufruf von mbtowc aktualisiert den internen globalen Konvertierungsstatus (ein statisches Objekt vom Typ std::mbstate_t, nur dieser Funktion bekannt). Wenn die Mehrbyte-Kodierung Umschaltzustände verwendet, muss darauf geachtet werden, Rückschritte oder mehrere Scans zu vermeiden. In jedem Fall sollten mehrere Threads mbtowc nicht ohne Synchronisation aufrufen: std::mbrtowc kann stattdessen verwendet werden.
[edit] Beispiel
#include <clocale> #include <cstdlib> #include <cstring> #include <iostream> int print_mb(const char* ptr) { std::mbtowc(nullptr, 0, 0); // reset the conversion state const char* end = ptr + std::strlen(ptr); int ret{}; for (wchar_t wc; (ret = std::mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret) std::wcout << wc; std::wcout << '\n'; return ret; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding const char* str = "z\u00df\u6c34\U0001d10b"; // or "zß水𝄋" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; print_mb(str); }
Ausgabe
zß水𝄋
[edit] Siehe auch
| konvertiert das nächste Multibyte-Zeichen in ein Wide-Zeichen, gegeben den Zustand (Funktion) | |
| gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück (Funktion) | |
| [virtuell] |
konvertiert eine Zeichenkette von ExternT nach InternT, z. B. beim Lesen aus einer Datei(virtual protected member function of std::codecvt<InternT,ExternT,StateT>) |
| C-Dokumentation für mbtowc
| |