Funkcia mbsrtowcs () v C ++ prevádza úzku viacbajtovú postupnosť znakov na širokú postupnosť znakov (typu wchar_t).
Funkcia mbsrtowcs () je definovaná v hlavičkovom súbore.
mbsrtowcs () prototyp
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
Funkcia mbsrtowcs () prevádza reťazec viacbajtových znakov, ktorého prvý bajt je reprezentovaný znakom * src na zodpovedajúcu reprezentáciu širokých znakov a je uložený v poli širokých znakov, na ktoré ukazuje cieľ. Maximálne len široké znaky sú zapísané do cieľa.
Proces premeny je podobný opakovanému volaniu mbrtowc (). Konverzia sa zastaví, ak:
- Viacbajtový nulový znak bol prevedený a uložený. V tomto prípade je src nastavený na hodnotu null a ps predstavuje stav počiatočného posunu.
- Vyskytol sa neplatný viacbajtový znak. V tomto prípade je src nastavené tak, aby ukazovalo na začiatok prvého nekonvertovaného viacbajtového znaku.
- len široký znak bol uložený v cieľ. V tomto prípade je src nastavený tak, aby ukazovala na začiatok prvého nekonvertovaného viacbajtového znaku.
mbsrtowcs () parametre
- cieľ: Ukazovateľ na pole, kde je uložený prevedený široký znak.
- src: Ukazovateľ na ukazovateľ na prvý viacbajtový znak, ktorý sa má previesť.
- len: Maximálny počet širokých znakov na uloženie.
- ps: Ukazovateľ na stav konverzie použitý pri interpretácii viacbytového reťazca
mbsrtowcs () Vrátená hodnota
- Pri úspechu funkcia mbsrtowcs () vráti počet zapísaných širokých znakov na cieľ s výnimkou ukončovacieho širokého nulového znaku. Ak je dest nulový ukazovateľ, vráti počet širokých znakov, ktoré by boli napísané vzhľadom na neobmedzenú dĺžku.
- Pri chybe konverzie sa vráti -1 a errno je nastavené na EILSEQ .
Príklad: Ako funguje funkcia mbsrtowcs ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const char* str = "u0763u0757u077fu075f"; wchar_t wstr(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = mbsrtowcs(wstr, &str, len, &ps); wcout << L"Number of wide characters written (excluding L "\0 ") = " << retVal << endl; wcout << L"Wide character = " << wstr << endl; return 0; )
Po spustení programu bude výstup:
Počet napísaných širokých znakov (okrem L " 0") = 4 Široký znak = ݣݗݿݟ