std:: mbrtoc32
|
Definiert im Header
<cuchar>
|
||
|
std::
size_t
mbrtoc32
(
char32_t
*
pc32,
const
char
*
s,
|
(seit C++11) | |
Konvertiert ein schmales Multibyte-Zeichen in seine UTF-32-Zeichendarstellung.
Falls s kein Nullzeiger ist, untersucht es höchstens n Bytes der Multibyte-Zeichenkette, beginnend mit dem von s gezeigten Byte, um die Anzahl der Bytes zu bestimmen, die notwendig sind, um das nächste Multibyte-Zeichen zu vervollständigen (einschließlich aller Shift-Sequenzen). Falls die Funktion feststellt, dass das nächste Multibyte-Zeichen in s vollständig und gültig ist, konvertiert sie es in das entsprechende 32-Bit-Zeichen und speichert es in * pc32 (falls pc32 nicht null ist).
Wenn das Multibyte-Zeichen in
*
s
einer multi-char32_t Sequenz entspricht (nicht möglich mit UTF-32), dann wird nach dem ersten Aufruf dieser Funktion
*
ps
so aktualisiert, dass die nächsten Aufrufe von
mbrtoc32
die zusätzlichen
char32_t
ausgeben, ohne
*
s
zu berücksichtigen.
Wenn s ein Nullzeiger ist, werden die Werte von n und pc32 ignoriert und der Aufruf entspricht std :: mbrtoc32 ( nullptr, "" , 1 , ps ) .
Wenn das erzeugte Breitzeichen das Nullzeichen ist, repräsentiert der Konvertierungszustand * ps den initialen Schaltzustand.
Die Multibyte-Kodierung, die von dieser Funktion verwendet wird, wird durch das aktuell aktive C-Locale festgelegt.
Inhaltsverzeichnis |
Parameter
| pc32 | - | Zeiger auf die Speicherstelle, in die das resultierende 32-Bit-Zeichen geschrieben wird |
| s | - | Zeiger auf die als Eingabe verwendete Multibyte-Zeichenkette |
| n | - | Begrenzung der Anzahl der Bytes in s, die untersucht werden können |
| ps | - | Zeiger auf das Konvertierungszustandsobjekt, das bei der Interpretation der Multibyte-Zeichenkette verwendet wird |
Rückgabewert
Das erste der folgenden zutreffenden Kriterien:
- 0 wenn das von s konvertierte Zeichen (und gespeichert in * pc32 falls nicht null) das Nullzeichen war.
- die Anzahl der Bytes [ 1 ... n ] des Multibyte-Zeichens, das erfolgreich von s konvertiert wurde.
- - 3 wenn das nächste char32_t aus einem Multi- char32_t -Zeichen nun in * pc32 geschrieben wurde. In diesem Fall werden keine Bytes von der Eingabe verarbeitet.
- - 2 wenn die nächsten n Bytes ein unvollständiges, aber bisher gültiges Multibyte-Zeichen darstellen. Nichts wird in * pc32 geschrieben.
- - 1 wenn ein Kodierungsfehler auftritt. Nichts wird in * pc32 geschrieben, der Wert EILSEQ wird in errno gespeichert und der Wert von * ps ist nicht spezifiziert.
Beispiele
#include <cassert> #include <clocale> #include <cstring> #include <cuchar> #include <cwchar> #include <iomanip> #include <iostream> int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::string str = "z\u00df\u6c34\U0001F34C"; // or u8"zß水🍌" std::cout << "Processing " << str.size() << " bytes: [ " << std::showbase; for (unsigned char c : str) std::cout << std::hex << +c << ' '; std::cout << "]\n"; std::mbstate_t state{}; // zero-initialized to initial state char32_t c32; const char* ptr = str.c_str(), *end = str.c_str() + str.size() + 1; while (std::size_t rc = std::mbrtoc32(&c32, ptr, end - ptr, &state)) { std::cout << "Next UTF-32 char: " << std::hex << static_cast<int>(c32) << " obtained from "; assert(rc != (std::size_t) - 3); // no surrogates in UTF-32 if (rc == (std::size_t) - 1) break; if (rc == (std::size_t) - 2) break; std::cout << std::dec << rc << " bytes [ "; for (std::size_t n = 0; n < rc; ++n) std::cout << std::hex << +static_cast<unsigned char>(ptr[n]) << ' '; std::cout << "]\n"; ptr += rc; } }
Ausgabe:
Processing 10 bytes: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c ] Next UTF-32 char: 0x7a obtained from 1 bytes [ 0x7a ] Next UTF-32 char: 0xdf obtained from 2 bytes [ 0xc3 0x9f ] Next UTF-32 char: 0x6c34 obtained from 3 bytes [ 0xe6 0xb0 0xb4 ] Next UTF-32 char: 0x1f34c obtained from 4 bytes [ 0xf0 0x9f 0x8d 0x8c ]
Siehe auch
|
(C++11)
|
konvertiert ein UTF-32-Zeichen in eine schmale Multibyte-Kodierung
(Funktion) |
|
[virtual]
|
konvertiert eine Zeichenkette von
ExternT
zu
InternT
, wie beim Lesen aus einer Datei
(virtuelle geschützte Memberfunktion von
std::codecvt<InternT,ExternT,StateT>
)
|
|
C-Dokumentation
für
mbrtoc32
|
|