std::c8rtomb
| Definiert in Header <cuchar> |
||
| std::size_t c8rtomb( char* s, char8_t c8, std::mbstate_t* ps ); |
(seit C++20) | |
Konvertiert einen einzelnen Code-Punkt von UTF-8 in eine schmale Multibyte-Zeichen-Darstellung.
Wenn s kein Nullzeiger ist und c8 die letzte Codeeinheit in einer gültigen UTF-8-Kodierung eines Code-Punktes ist, ermittelt die Funktion die Anzahl der benötigten Bytes, um die Multibyte-Zeichen-Darstellung dieses Code-Punktes zu speichern (einschließlich etwaiger Umschaltsequenzen und unter Berücksichtigung des aktuellen Multibyte-Konvertierungszustands *ps), und speichert die Multibyte-Zeichen-Darstellung im Zeichenarray, dessen erstes Element von s gezeigt wird, wobei *ps bei Bedarf aktualisiert wird. Maximal MB_CUR_MAX Bytes können von dieser Funktion geschrieben werden.
Wenn c8 nicht die endgültige UTF-8-Codeeinheit in einer Darstellung eines Code-Punktes ist, schreibt die Funktion nicht in das von s gezeigte Array, nur *ps wird aktualisiert.
Wenn s ein Nullzeiger ist, ist der Aufruf äquivalent zu std::c8rtomb(buf, u8'\0', ps) für einen internen Puffer buf.
Wenn c8 das Nullzeichen u8'\0' ist, wird ein Null-Byte gespeichert, dem jede Umschaltsequenz vorangestellt ist, die notwendig ist, um den anfänglichen Umschaltzustand wiederherzustellen, und der Konvertierungszustandsparameter *ps wird aktualisiert, um den anfänglichen Umschaltzustand darzustellen.
Die von dieser Funktion verwendete Multibyte-Kodierung wird durch die aktuell aktive C-Locale bestimmt.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf das schmale Zeichenarray, in dem das Multibyte-Zeichen gespeichert wird |
| c8 | - | die zu konvertierende UTF-8-Codeeinheit |
| ps | - | Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation des Multibyte-Strings verwendet wird |
[edit] Rückgabewert
Die Anzahl der im Array-Objekt gespeicherten Bytes (einschließlich etwaiger Umschaltsequenzen). Dies kann null sein, wenn c8 nicht die endgültige Codeeinheit in der UTF-8-Darstellung eines Code-Punktes ist.
Wenn c8 ungültig ist (nicht zu einer Sequenz von char8_t beiträgt, die einem gültigen Multibyte-Zeichen entspricht), wird der Wert des Makros EILSEQ in errno gespeichert, static_cast<std::size_t>(-1) zurückgegeben und der Konvertierungszustand ist undefiniert.
[edit] Hinweise
Aufrufe von c8rtomb mit einem Nullzeiger-Argument für s können mit anderen Aufrufen von c8rtomb mit einem Nullzeiger-Argument für s eine Datenrennen verursachen.
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| (C++20) |
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung (Funktion) |
| (C++11) |
konvertiert ein UTF-16-Zeichen in eine schmale Multibyte-Kodierung (Funktion) |
| C-Dokumentation für c8rtomb
| |