Funkcia wcsrtombs () v C ++ prevádza širokú postupnosť znakov na úzku viacbajtovú postupnosť znakov.
Funkcia wcsrtombs () je definovaná v hlavičkovom súbore.
prototyp wcsrtombs ()
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Funkcia wcsrtombs () prevádza reťazec širokých znakov reprezentovaný znakom * src na zodpovedajúci reťazec viacbajtových znakov a je uložená v znakovom poli, na ktoré ukazuje dest, ak dest nie je null. Maximálne počet znakov len je zapísaných do cieľa.
Proces premeny je podobný opakovanému volaniu wcrtomb (). Konverzia sa zastaví, ak:
- Bol prevedený a uložený široký prázdny znak. V tomto prípade je src nastavený na hodnotu null a ps predstavuje stav počiatočného posunu.
- Vyskytol sa neplatný široký znak. V takom prípade je src nastavený tak, aby ukazovala na začiatok prvého nepremeneného širokého znaku.
- len bajty boli uložené v cieľ. V takom prípade je src nastavený tak, aby ukazovala na začiatok prvého nepremeneného širokého znaku.
wcsrtombs () parametre
- > cieľ: Ukazovateľ na pole znakov, kde je uložený prevedený viacbajtový znak.
- src: Ukazovateľ na ukazovateľ na prvý široký znak, ktorý sa má previesť.
- len: Maximálny počet bajtov dostupný v cieľovom poli.
- ps: Ukazovateľ na objekt stavu konverzie.
wcsrtombs () Vrátená hodnota
- Pri úspechu funkcia wcsrtombs () vráti počet viacbajtových znakov zapísaných do cieľa s výnimkou ukončovacieho širokého nulového znaku, ale vrátane posúvacích sekvencií.
Ak je dest nulový ukazovateľ, vráti počet širokých znakov, ktoré by boli zapísané, okrem ukončovacieho nulového znaku. - Pri chybe konverzie sa vráti -1 a errno je nastavené na EILSEQ .
Príklad: Ako funguje funkcia wcsrtombs ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const wchar_t* wstr = L"u0763u0757u077fu075f"; char str(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = wcsrtombs(str, &wstr, len, &ps); cout << "Number of multibyte characters written (excluding "\0 ") = " << retVal << endl; cout << "Multibyte character = " << str << endl; return 0; )
Po spustení programu bude výstup:
Počet napísaných viacbajtových znakov (okrem „ 0“) = 8 Viacbajtový znak = ݣݗݿݟ