std:: wcrtomb
|
Definiert im Header
<cwchar>
|
||
|
std::
size_t
wcrtomb
(
char
*
s,
wchar_t
wc,
std::
mbstate_t
*
ps
)
;
|
||
Wandelt ein Breitzeichen in seine schmale Multibyte-Darstellung um.
Wenn s kein Nullzeiger ist, bestimmt die Funktion die Anzahl der Bytes, die notwendig sind, um die Multibyte-Zeichendarstellung von wc zu speichern (einschließlich aller Shift-Sequenzen und unter Berücksichtigung des aktuellen Multibyte-Konvertierungszustands * ps ), und speichert die Multibyte-Zeichendarstellung im Zeichenarray, dessen erstes Element durch s gezeigt wird, wobei * ps bei Bedarf aktualisiert wird. Diese Funktion kann maximal MB_CUR_MAX Bytes schreiben.
Wenn
s
ein Nullzeiger ist, entspricht der Aufruf
std
::
wcrtomb
(
buf, L
'
\0
'
, ps
)
für einen internen Puffer
buf
.
Wenn wc das Null-Breitzeichen L ' \0 ' ist, wird ein Null-Byte gespeichert, dem ggf. eine Shift-Sequenz vorausgeht, die notwendig ist, um den initialen Shift-Zustand wiederherzustellen, und der Konvertierungszustandsparameter * ps wird aktualisiert, um den initialen Shift-Zustand darzustellen.
Inhaltsverzeichnis |
Parameter
| s | - | Zeiger auf ein schmales Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird |
| wc | - | das zu konvertierende Breitzeichen |
| ps | - | Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation der Multibyte-Zeichenkette verwendet wird |
Rückgabewert
Bei Erfolg gibt die Anzahl der Bytes (einschließlich aller Schaltsequenzen) zurück, die in das Zeichenarray geschrieben wurden, dessen erstes Element durch s gezeigt wird.
Bei Fehler (falls wc kein gültiges Breitzeichen ist), gibt static_cast < std:: size_t > ( - 1 ) zurück, speichert EILSEQ in errno und belässt * ps in einem nicht näher spezifizierten Zustand.
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
Siehe auch
|
wandelt ein Breitzeichen in seine Multibyte-Darstellung um
(Funktion) |
|
|
wandelt das nächste Multibyte-Zeichen in ein Breitzeichen um, unter Berücksichtigung des Zustands
(Funktion) |
|
|
[virtual]
|
wandelt eine Zeichenkette von
InternT
zu
ExternT
um, beispielsweise beim Schreiben in eine Datei
(virtuelle geschützte Memberfunktion von
std::codecvt<InternT,ExternT,StateT>
)
|
|
C-Dokumentation
für
wcrtomb
|
|