C ++ mbrtowc () - C ++ Standardbibliotek

Funktionen mbrtowc () i C ++ konverterar ett smalt multibyt-tecken till ett brett tecken (av typen wchar_t).

Funktionen mbrtowc () definieras i rubrikfilen.

mbrtowc () prototyp

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

Funktionen mbrtowc () omvandlar multibytkaraktären som representeras av s till ett brett tecken och lagras i den adress som pwc pekar på.

  • Om s inte är en nollpekare undersöks maximalt n byte som börjar från den byte som pekas på av s för att bestämma antalet byte som är nödvändiga för att slutföra nästa multibyttecken (inklusive eventuella skiftningssekvenser).
    Om nästa n-multibyt-tecken i s är fullständigt och giltigt, konverterar funktionen det till motsvarande breda tecken och lagras på den plats som pwc pekar på.
  • Om s är en nollpekare har parametrarna n och pwc inget att göra med funktionsanropet och samtalet motsvarar std::mbrtowc(NULL, "", 1, ps).
  • Om det breda karaktär som produceras är ett noll tecken är omvandlingstillståndet som lagras i * ps det initiala skiftläget.

mbrtowc () Parametrar

  • pwc: pekare till minnesadressen där den konverterade breda karaktären är lagrad.
  • s: Pekare till det multibyte-tecken som ska konverteras.
  • n: Maximalt antal byte i s att undersöka.
  • ps: Pekare till konverteringstillståndet som används vid tolkning av multibytsträngen

mbrtowc () Returvärde

Funktionen mbrtowc () returnerar det första av följande som är giltigt:

  • 0 om det breda tecknet som omvandlas från s är null (om pwc inte är null).
  • Antalet multibytkaraktär har konverterats från s.
  • -2 om nästa n byte inte representerar ett komplett multibyt-tecken.
  • -1 är kodningsfel inträffar, errno är inställt på EILSEQ .

Exempel: Hur fungerar 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; )

När du kör programmet blir resultatet:

 Nästa 1 byte (s) representerar inte ett fullständigt multibytekaraktär Nästa 5 byte (er) innehåller 2 byte med multibytekaraktär, vilket resulterar i bred karaktär är µ Den konverterade breda karaktären är en null bred karaktär

Intressanta artiklar...