Die Funktion mbrtowc () in C ++ konvertiert ein schmales Multibyte-Zeichen in ein breites Zeichen (vom Typ wchar_t).
Die Funktion mbrtowc () ist in der Header-Datei definiert.
mbrtowc () Prototyp
size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);
Die Funktion mbrtowc () konvertiert das durch s dargestellte Multibyte-Zeichen in ein breites Zeichen und wird in der Adresse gespeichert, auf die pwc zeigt.
- Wenn s kein Nullzeiger ist, werden maximal n Bytes beginnend mit dem Byte, auf das s zeigt, untersucht, um die Anzahl der Bytes zu bestimmen, die zum Vervollständigen des nächsten Multibyte-Zeichens (einschließlich etwaiger Verschiebungssequenzen) erforderlich sind.
Wenn das nächste n Multibyte-Zeichen in s vollständig und gültig ist, konvertiert die Funktion es in das entsprechende breite Zeichen und wird an der Stelle gespeichert, auf die pwc zeigt. - Wenn s ein Nullzeiger ist, haben die Parameter n und pwc nichts mit dem Funktionsaufruf zu tun und der Aufruf entspricht
std::mbrtowc(NULL, "", 1, ps)
. - Wenn das erzeugte breite Zeichen ein Nullzeichen ist, ist der in * ps gespeicherte Konvertierungszustand der anfängliche Verschiebungszustand.
mbrtowc () Parameter
- pwc: Zeiger auf die Speicheradresse, in der das konvertierte breite Zeichen gespeichert ist.
- s: Zeiger auf das zu konvertierende Multibyte-Zeichen.
- n: Maximale Anzahl von zu untersuchenden Bytes in s.
- ps: Zeiger auf den Konvertierungsstatus, der bei der Interpretation der Multibyte-Zeichenfolge verwendet wird
mbrtowc () Rückgabewert
Die Funktion mbrtowc () gibt die erste der folgenden gültigen Funktionen zurück:
- 0, wenn das von s konvertierte breite Zeichen null ist (wenn pwc nicht null ist).
- Die Anzahl der Multibyte-Zeichen, die erfolgreich von s konvertiert wurden.
- -2, wenn die nächsten n Bytes kein vollständiges Multibyte-Zeichen darstellen.
- -1 ist ein Codierungsfehler aufgetreten, errno ist auf EILSEQ gesetzt .
Beispiel: Wie funktioniert die Funktion mbrtowc ()?
#include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = " "; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )
Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:
Die nächsten 1 Bytes stellen kein vollständiges Multibyte-Zeichen dar. Die nächsten 5 Bytes enthalten 2 Bytes Multibyte-Zeichen. Das resultierende breite Zeichen ist µ. Das konvertierte breite Zeichen ist ein null breites Zeichen