std:: wctomb
|
Definiert in Header
<cstdlib>
|
||
|
int
wctomb
(
char
*
s,
wchar_t
wc
)
;
|
||
Wandelt ein Breitzeichen wc in Multibyte-Kodierung um und speichert es (einschließlich aller Shift-Sequenzen) im char-Array, dessen erstes Element durch s gezeigt wird. Es werden maximal MB_CUR_MAX Zeichen gespeichert. Die Konvertierung wird durch die LC_CTYPE-Kategorie der aktuellen Locale beeinflusst.
Wenn wc das Nullzeichen ist, wird das Nullbyte in s geschrieben, vorangestellt von allen Shift-Sequenzen, die notwendig sind, um den initialen Shift-Zustand wiederherzustellen.
Wenn s ein Nullzeiger ist, setzt es den globalen Konvertierungszustand zurück und bestimmt, ob Schiebesequenzen verwendet werden.
Inhaltsverzeichnis |
Parameter
| s | - | Zeiger auf das Zeichenarray für die Ausgabe |
| wc | - | zu konvertierendes Breitzeichen |
Rückgabewert
Wenn s kein Nullzeiger ist, gibt die Anzahl der Bytes zurück, die in der Multibyte-Darstellung von wc enthalten sind, oder - 1 falls wc kein gültiges Zeichen ist.
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
wctomb
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, ist diese Funktion nicht wiedereintrittsfähig. In jedem Fall sollten mehrere Threads
wctomb
nicht ohne Synchronisierung aufrufen:
std::wcrtomb
kann stattdessen verwendet werden.
Beispiel
#include <clocale> #include <cstdlib> #include <iomanip> #include <iostream> #include <string> void print_wide(const std::wstring& wstr) { bool shifts = std::wctomb(nullptr, 0); // reset the conversion state std::cout << "shift sequences are " << (shifts ? "" : "not" ) << " used\n" << std::uppercase << std::setfill('0'); for (const wchar_t wc : wstr) { std::string mb(MB_CUR_MAX, '\0'); const int ret = std::wctomb(&mb[0], wc); const char* s = ret > 1 ? "s" : ""; std::cout << "multibyte char '" << mb << "' is " << ret << " byte" << s << ": [" << std::hex; for (int i{0}; i != ret; ++i) { const int c = 0xFF & mb[i]; std::cout << (i ? " " : "") << std::setw(2) << c; } std::cout << "]\n" << std::dec; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 narrow multibyte encoding std::wstring wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋" print_wide(wstr); }
Ausgabe:
shift sequences are not used multibyte char 'z' is 1 byte: [7A] multibyte char 'ß' is 2 bytes: [C3 9F] multibyte char '水' is 3 bytes: [E6 B0 B4] multibyte char '𝄋' is 4 bytes: [F0 9D 84 8B]
Siehe auch
|
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um
(Funktion) |
|
|
wandelt ein Breitzeichen in seine Multibyte-Darstellung um, mit Zustandsinformation
(Funktion) |
|
|
[virtual]
|
wandelt eine Zeichenkette von
InternT
zu
ExternT
um, z.B. beim Schreiben in eine Datei
(geschützte virtuelle Memberfunktion von
std::codecvt<InternT,ExternT,StateT>
)
|
|
C-Dokumentation
für
wctomb
|
|