C ++ mbrtowc () - C ++ Standardbibliotek

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

Funktionen mbrtowc () er defineret i headerfilen.

mbrtowc () prototype

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

Funktionen mbrtowc () konverterer multibyttegnet repræsenteret af s til et bredt tegn og er gemt i den adresse, pwc peger på.

  • Hvis s ikke er en nul pointer, undersøges et maksimum af n byte startende fra den byte, som s er peget på, for at bestemme antallet af byte, der er nødvendige for at fuldføre det næste multibyttegn (inklusive eventuelle skiftesekvenser).
    Hvis det næste n multibyttegn i s er komplet og gyldigt, konverterer funktionen det til det tilsvarende brede tegn og lagres på det sted, pwc peger på.
  • Hvis s er en nul pointer, har parametrene n og pwc intet at gøre med funktionsopkaldet, og opkaldet svarer til std::mbrtowc(NULL, "", 1, ps).
  • Hvis det producerede brede tegn er et nul tegn, er konverteringstilstanden, der er gemt i * ps, den oprindelige skifttilstand.

mbrtowc () Parametre

  • pwc: Markør til hukommelsesadressen, hvor det konverterede brede tegn er gemt.
  • s: Markør til det multibyttegn, der skal konverteres.
  • n: Maksimalt antal byte i s, der skal undersøges.
  • ps: Markør til den konverteringstilstand, der bruges ved fortolkning af multibyte-strengen

mbrtowc () Returværdi

Funktionen mbrtowc () returnerer det første af følgende, der er gyldigt:

  • 0, hvis det brede tegn konverteret fra s er nul (hvis pwc ikke er nul).
  • Antallet af multibyttegn, der er konverteret fra s.
  • -2, hvis de næste n byte ikke repræsenterer et komplet multibyttegn.
  • -1 er kodningsfejl opstår, errno er indstillet 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 kører programmet, vil output være:

 Næste 1 byte (r) repræsenterer ikke et komplet multibyttegn Næste 5 byte (r) indeholder 2 byte med multibyttegn, hvilket resulterer i bred karakter er µ Det konverterede brede tegn er et null bredt tegn

Interessante artikler...