C ++ mbrtowc () - C ++ Standardbibliotek

Funksjonen mbrtowc () i C ++ konverterer et smalt multibyttegn til et bredt tegn (av typen wchar_t).

Funksjonen mbrtowc () er definert i topptekstfilen.

mbrtowc () prototype

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

Funksjonen mbrtowc () konverterer multibyte-tegnet representert med s til et bredt tegn og lagres i adressen pwc peker på.

  • Hvis s ikke er en nullpeker, blir maksimalt n byte startende fra den byte som er pekt på av s undersøkt for å bestemme antall byte som er nødvendige for å fullføre neste multibyte-tegn (inkludert eventuelle skift-sekvenser).
    Hvis det neste n multibyttegnet i s er fullstendig og gyldig, konverterer funksjonen det til det tilsvarende brede tegnet og lagres på det stedet som pwc peker på.
  • Hvis s er en nullpeker, har parameterne n og pwc ingenting å gjøre med funksjonsanropet, og samtalen tilsvarer std::mbrtowc(NULL, "", 1, ps).
  • Hvis det brede tegnet som produseres er et nulltegn, er konverteringstilstanden som er lagret i * ps den opprinnelige skifttilstanden.

mbrtowc () Parametere

  • pwc: pekeren til minneadressen der det konverterte brede tegnet er lagret.
  • s: peker til multibyttegnet som skal konverteres.
  • n: Maksimalt antall byte i s for å undersøke.
  • ps: peker til konverteringstilstanden som brukes når du tolker multibytestrengen

mbrtowc () Returverdi

Funksjonen mbrtowc () returnerer det første av følgende som er gyldig:

  • 0 hvis det brede tegnet konvertert fra s er null (hvis pwc ikke er null).
  • Antallet multibyte-tegn konvertert fra s.
  • -2 hvis de neste n byte ikke representerer et komplett multibyte-tegn.
  • -1 er kodingsfeil, errno er satt til EILSEQ .

Eksempel: Hvordan fungerer 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 kjører programmet, vil utdataene være:

 Neste 1 byte (r) representerer ikke et komplett multibyttegn Neste 5 byte (r) inneholder 2 byte med multibyttegn, resulterende bred karakter er µ Det konverterte brede tegnet er et null bredt tegn

Interessante artikler...