C ++ mbrtowc () - C ++ Standardbibliothek

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

Interessante Beiträge...