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