Die Funktion mbrtoc32 () in C ++ konvertiert ein schmales Multibyte-Zeichen in eine 32-Bit-Zeichendarstellung.
Die Funktion mbrtoc32 () ist in der Header-Datei definiert.
mbrtoc32 () Prototyp
size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
Die Funktion mbrtoc32 () konvertiert höchstens n durch s dargestellte Multibyte-Zeichen in das entsprechende utf-32-Zeichen und speichert es an dem Speicherort, auf den pc32 zeigt.
Wenn s einen Nullzeiger darstellt, werden die Werte von n und pc32 ignoriert und der Aufruf von entspricht mbrtoc32(NULL, "", 1, ps)
.
Wenn das resultierende erzeugte Zeichen null ist, repräsentiert der Konvertierungszustand * ps den anfänglichen Verschiebungszustand.
mbrtoc32 () Parameter
- pc32: Zeiger auf den Speicherort zum Speichern des resultierenden 32-Bit-Zeichens.
- s: Zeiger auf das zu konvertierende Multibyte-Zeichen.
- n: Maximale Anzahl der zu konvertierenden Bytes in s.
- ps: Ein Zeiger auf ein mbstate_t-Objekt, das beim Interpretieren der Multibyte-Zeichenfolge verwendet wird.
mbrtoc32 () Rückgabewert
Die Funktion mbrtoc32 () gibt den ersten der folgenden Werte zurück, der den folgenden Fällen entspricht:
- 0, wenn das konvertierte Zeichen ein Nullzeichen ist.
- Die Anzahl der Bytes (höchstens n) des Multibyte-Zeichens, das erfolgreich in ein 32-Bit-Zeichen konvertiert wurde.
- -3, wenn das nächste
char32_t
Zeichen aus einem Zeichen mit mehreren Zeichen 32_t (z. B. ein Ersatzpaar) jetzt 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. In diesem Fall wird nichts in * pc32 geschrieben.
- -1, wenn ein Codierungsfehler auftritt. In diesem Fall wird nichts in * pc32 geschrieben, errno wird auf EILSEQ gesetzt und der Wert von * ps wird nicht angegeben.
Beispiel: Wie funktioniert die Funktion mbrtoc32 ()?
#include #include #include #include using namespace std; int main(void) ( char32_t pc32; char s() = "x" ; mbstate_t ps; int length; length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc32() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("32-bit character = 0x%08hx", pc32); return 0; )
Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:
Multibyte-Zeichenfolge = x Länge = 1 32-Bit-Zeichen = 0x00000078