Funkce wcsrtombs () v C ++ převádí sekvenci širokých znaků na sekvenci úzkých vícebajtových znaků.
Funkce wcsrtombs () je definována v hlavičkovém souboru.
prototyp wcsrtombs ()
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Funkce wcsrtombs () převádí řetězec širokých znaků představovaný * src na odpovídající řetězec vícebajtových znaků a je uložen v poli znaků, na které ukazuje dest, pokud dest není null. Do cíle se zapíše maximálně znaků len.
Proces převodu je podobný opakovanému volání wcrtomb (). Převod se zastaví, pokud:
- Byl převeden a uložen široký prázdný znak. V tomto případě je src nastaveno na null a ps představuje počáteční stav posunu.
- Byl zjištěn neplatný široký znak. V tomto případě je src nastaven tak, aby ukazoval na začátek prvního nepřevedeného širokého znaku.
- jen bajty byly uloženy v cílové V tomto případě je src nastaven tak, aby ukazoval na začátek prvního nepřevedeného širokého znaku.
wcsrtombs () Parametry
- > dest: Ukazatel na pole znaků, kde je uložen převedený vícebajtový znak.
- src: Ukazatel na ukazatel na první široký znak, který se má převést.
- len: Maximální počet bajtů k dispozici v cílovém poli.
- ps: Ukazatel na objekt stavu převodu.
wcsrtombs () Vrátí hodnotu
- Při úspěchu funkce wcsrtombs () vrací počet vícebajtových znaků zapsaných do cíle s výjimkou ukončujícího širokého znaku null, ale včetně posuvu.
Pokud je dest nulový ukazatel, vrátí počet širokých znaků, které by byly zapsány, kromě ukončujícího nulového znaku. - Při chybě převodu se vrátí -1 a errno je nastaveno na EILSEQ .
Příklad: Jak funguje funkce 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; )
Když spustíte program, výstup bude:
Počet zapsaných vícebajtových znaků (kromě „ 0“) = 8 Vícebajtový znak = ݣݗݿݟ