Namensräume
Varianten
Aktionen

std::c8rtomb

Von cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
 
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

[edit] Siehe auch

(C++20)
konvertiert ein schmales Multibyte-Zeichen in UTF-8-Kodierung
(Funktion) [bearbeiten]
(C++11)
konvertiert ein UTF-16-Zeichen in eine schmale Multibyte-Kodierung
(Funktion) [bearbeiten]
C-Dokumentation für c8rtomb