C ++ mbrtowc () - C ++ standaardbibliotheek

De functie mbrtowc () in C ++ converteert een smal multibyte-teken naar een breed teken (van het type wchar_t).

De functie mbrtowc () is gedefinieerd in het headerbestand.

mbrtowc () prototype

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

De functie mbrtowc () converteert het multibyte-teken voorgesteld door s naar een breed teken en wordt opgeslagen in het adres waarnaar pwc verwijst.

  • Als s geen nul-pointer is, wordt een maximum van n bytes onderzocht, beginnend bij de byte waarnaar wordt verwezen door s, om het aantal bytes te bepalen dat nodig is om het volgende multibyte-teken te voltooien (inclusief eventuele verschuivingsreeksen).
    Als het volgende n multibyte-teken in s compleet en geldig is, converteert de functie het naar het corresponderende brede teken en wordt het opgeslagen op de locatie waarnaar pwc verwijst.
  • Als s een null-pointer is, hebben de parameters n en pwc niets te maken met de functieaanroep en is de aanroep gelijk aan std::mbrtowc(NULL, "", 1, ps).
  • Als het geproduceerde brede teken een nul-teken is, is de conversietoestand die is opgeslagen in * ps de aanvankelijke schakeltoestand.

mbrtowc () Parameters

  • pwc: Pointer naar het geheugenadres waar het geconverteerde brede teken is opgeslagen.
  • s: Pointer naar het multibyte-teken dat moet worden geconverteerd.
  • n: Maximaal aantal bytes in s om te onderzoeken.
  • ps: Pointer naar de conversiestatus die wordt gebruikt bij het interpreteren van de multibyte-reeks

mbrtowc () Retourwaarde

De functie mbrtowc () retourneert de eerste van de volgende geldige:

  • 0 als het brede teken geconverteerd van s nul is (als pwc niet nul is).
  • Het aantal multibyte-tekens dat is geconverteerd van s.
  • -2 als de volgende n bytes geen volledig multibyte-teken vertegenwoordigen.
  • -1 is er een coderingsfout opgetreden , errno is ingesteld op EILSEQ .

Voorbeeld: hoe werkt de functie 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; )

Wanneer u het programma uitvoert, is de uitvoer:

 Volgende 1 byte (n) vertegenwoordigt geen volledig multibyte-teken Volgende 5 byte (s) bevatten 2 bytes aan multibyte-teken, resulterend breed teken is µ Het geconverteerde brede teken is een nul breed teken

Interessante artikelen...