C ++ mbrtowc () - C ++ standardraamatukogu

Funktsioon mbrtowc () funktsioonis C ++ teisendab kitsa mitmebaidise märgi laiaks (tüüpi wchar_t).

Funktsioon mbrtowc () on määratletud päisefailis.

mbrtowc () prototüüp

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

Funktsioon mbrtowc () teisendab s-ga kujutatud mitmebaidise tähemärgi laiaks ja salvestatakse pwc osutatavale aadressile.

  • Kui s ei ole nullkursor, uuritakse maksimaalselt n baiti, alustades s-i osundatavast baidist, et määrata järgmise baidise märgi (sh kõik nihkejärjestused) lõpuleviimiseks vajalike baitide arv.
    Kui s-s järgmine n mitmebaidist tähemärki on täielik ja kehtiv, teisendab funktsioon selle vastavaks laiaks tähemärgiks ja salvestatakse pwc osutatavasse asukohta.
  • Kui s on nullkursor, pole parameetritel n ja pwc midagi pistmist funktsioonikutsega ja kõne on samaväärne funktsiooniga std::mbrtowc(NULL, "", 1, ps).
  • Kui toodetud lai märk on nullmärk, on * ps-sse salvestatud teisenduseisund esialgne nihkeolek.

mbrtowc () parameetrid

  • pwc: kursor mäluaadressile, kuhu teisendatud lai märk on salvestatud.
  • s: kursor mitmebaidise tähe teisendamiseks.
  • n: maksimaalne uuritavate baitide arv sekundites.
  • ps: kursor teisenduse olekusse, mida kasutatakse mitmebaidise stringi tõlgendamisel

mbrtowc () Tagastusväärtus

Funktsioon mbrtowc () tagastab esimese järgmise kehtiva:

  • 0, kui s-st teisendatud lai märk on null (kui pwc pole null).
  • S-st edukalt teisendatud mitmebaidise märgi arv.
  • -2, kui järgmised n baiti ei tähenda täielikku mitmebaidist tähemärki.
  • -1 on kodeerimisviga, errno on seatud väärtusele EILSEQ .

Näide: Kuidas funktsioon mbrtowc () töötab?

 #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; )

Programmi käivitamisel on väljund järgmine:

 Järgmine 1 bait ei esinda täielikku mitmebaidist tähemärki Järgmine 5 baiti mahutab 2 baiti mitmebaidist märki, tulemuseks on lai märk µ Teisendatud lai märk on null lai märk

Huvitavad Artiklid...