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