C ++ mbrtowc () - C ++ standardna biblioteka

Funkcija mbrtowc () u C ++ pretvara uski višebajtni znak u široki znak (tipa wchar_t).

Funkcija mbrtowc () definirana je u datoteci zaglavlja.

prototip mbrtowc ()

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

Funkcija mbrtowc () pretvara višebajtni znak predstavljen s u široki znak i pohranjuje se na adresu na koju ukazuje pwc.

  • Ako s nije null pokazivač, ispituje se najviše n bajtova počevši od bajta na koji pokazuje s kako bi se utvrdio broj bajtova potreban za dovršetak sljedećeg višebajtnog znaka (uključujući sve sljedove pomake).
    Ako je sljedeći n višebajtni znak u s potpun i valjan, funkcija ga pretvara u odgovarajući široki znak i pohranjuje se na mjesto na koje ukazuje pwc.
  • Ako je s null pokazivač, parametri n i pwc nemaju nikakve veze s pozivom funkcije, a poziv je ekvivalentan std::mbrtowc(NULL, "", 1, ps).
  • Ako je proizvedeni široki znak nulti znak, stanje pretvorbe pohranjeno u * ps početno je stanje pomaka.

mbrtowc () Parametri

  • pwc: Pokazivač na memorijsku adresu na kojoj je pohranjeni pretvoreni široki znak.
  • s: Pokazivač na višebajtni znak za pretvorbu.
  • n: Maksimalan broj bajtova u s za ispitivanje.
  • ps: pokazivač na stanje pretvorbe koje se koristi pri tumačenju višebajtnog niza

mbrtowc () Povratna vrijednost

Funkcija mbrtowc () vraća prvo od sljedećeg koje je valjano:

  • 0 ako je široki znak pretvoren iz s null (ako pwc nije null).
  • Broj multibajtnih znakova uspješno pretvoren iz s.
  • -2 ako sljedećih n bajtova ne predstavlja cjeloviti višebajtni znak.
  • -1 dolazi do pogreške kodiranja, errno je postavljeno na EILSEQ .

Primjer: Kako funkcionira funkcija 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; )

Kada pokrenete program, izlaz će biti:

 Sljedećih 1 bajt (a) ne predstavljaju cjeloviti višebajtni znak Sljedećih 5 bajtova (bajtova) sadrže 2 bajta višebajtnog znaka, rezultirajući širokim znakom je µ Pretvoreni široki znak je nula široki znak

Zanimljivi članci...