std:: mbtowc
|
Definiert im Header
<cstdlib>
|
||
|
int
mbtowc
(
wchar_t
*
pwc,
const
char
*
s,
std::
size_t
n
)
;
|
||
Konvertiert ein Multibyte-Zeichen, dessen erstes Byte auf s zeigt, in ein Breitzeichen, geschrieben nach * pwc falls pwc nicht null ist.
Wenn s ein Nullzeiger ist, setzt es den globalen Konvertierungszustand zurück und bestimmt, ob Schiebesequenzen verwendet werden.
Inhaltsverzeichnis |
Parameter
| s | - | Zeiger auf das Multibyte-Zeichen |
| n | - | Begrenzung der Anzahl der Bytes in s, die untersucht werden können |
| pwc | - | Zeiger auf das Breitzeichen für die Ausgabe |
Rückgabewert
Wenn s kein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die im Multibyte-Zeichen enthalten sind, oder - 1 wenn die ersten von s gezeigten Bytes kein gültiges Multibyte-Zeichen bilden, oder 0 wenn s auf das Nullzeichen ' \0 ' zeigt.
Wenn s ein Nullzeiger ist, setzt es seinen internen Konvertierungszustand zurück, um den anfänglichen Shift-Zustand darzustellen, und gibt 0 zurück, wenn die aktuelle Multibyte-Kodierung zustandsunabhängig ist (keine Shift-Sequenzen verwendet), oder einen Wert ungleich Null, wenn die aktuelle Multibyte-Kodierung zustandsabhängig ist (Shift-Sequenzen verwendet).
Hinweise
Jeder Aufruf von
mbtowc
aktualisiert den internen globalen Konvertierungszustand (ein statisches Objekt vom Typ
std::mbstate_t
, der nur dieser Funktion bekannt ist). Wenn die Multibyte-Kodierung Shift-Zustände verwendet, muss darauf geachtet werden, Backtracking oder mehrfaches Scannen zu vermeiden. In jedem Fall sollten mehrere Threads
mbtowc
nicht ohne Synchronisierung aufrufen:
std::mbrtowc
kann stattdessen verwendet werden.
Beispiel
#include <clocale> #include <cstdlib> #include <cstring> #include <iostream> int print_mb(const char* ptr) { std::mbtowc(nullptr, 0, 0); // Konvertierungsstatus zurücksetzen 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 schmale Multibyte-Kodierung const char* str = "z\u00df\u6c34\U0001d10b"; // oder "zß水𝄋" // oder "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; print_mb(str); }
Ausgabe:
zß水𝄋
Siehe auch
|
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion) |
|
|
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion) |
|
|
[virtual]
|
konvertiert eine Zeichenkette von
ExternT
zu
InternT
, beispielsweise beim Lesen aus einer Datei
(geschützte virtuelle Memberfunktion von
std::codecvt<InternT,ExternT,StateT>
)
|
|
C-Dokumentation
für
mbtowc
|
|