C ++ mbrtowc () - Biblioteca standard C ++

Funcția mbrtowc () din C ++ convertește un caracter îngust multibyte într-un caracter larg (de tip wchar_t).

Funcția mbrtowc () este definită în fișierul antet.

mbrtowc () prototip

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

Funcția mbrtowc () convertește caracterul multibyte reprezentat de s într-un caracter larg și este stocat în adresa indicată de pwc.

  • Dacă s nu este un indicator nul, se examinează un maxim de n octeți începând de la octetul indicat de s pentru a determina numărul de octeți necesar pentru a completa următorul caracter multibyte (inclusiv orice secvențe de deplasare).
    Dacă următorul n caracter multibyte din s este complet și valid, funcția îl convertește în caracterul larg corespunzător și este stocat în locația indicată de pwc.
  • Dacă s este un pointer nul, parametrii n și pwc nu au nimic de-a face cu apelul funcțional și apelul este echivalent cu std::mbrtowc(NULL, "", 1, ps).
  • Dacă caracterul larg produs este un caracter nul, starea de conversie stocată în * ps este starea inițială de schimbare.

mbrtowc () Parametri

  • pwc: Pointer către adresa de memorie unde este stocat caracterul larg convertit.
  • s: Pointer către caracterul multibyte de convertit.
  • n: numărul maxim de octeți în s de examinat.
  • ps: Pointer către starea de conversie utilizată la interpretarea șirului multibyte

mbrtowc () Valoare returnată

Funcția mbrtowc () returnează primul dintre următoarele valide:

  • 0 dacă caracterul larg convertit din s este nul (dacă pwc nu este nul).
  • Numărul de caractere multibyte convertite cu succes din s.
  • -2 dacă următorii n octeți nu reprezintă un caracter multibyte complet.
  • -1 este eroare de codare, erno este setat la EILSEQ .

Exemplu: Cum funcționează funcția 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; )

Când rulați programul, ieșirea va fi:

 Următorul 1 octeți nu reprezintă un caracter multibyte complet Următorul 5 octeți conține 2 octeți de caracter multibyte, caracterul larg rezultat este µ Caracterul larg convertit este un caracter lat nul

Articole interesante...