Funkce mbsrtowcs () v C ++ převádí sekvenci úzkých vícebajtových znaků na sekvenci širokých znaků (typu wchar_t).
Funkce mbsrtowcs () je definována v hlavičkovém souboru.
mbsrtowcs () prototyp
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
Funkce mbsrtowcs () převádí řetězec vícebajtových znaků, jehož první bajt je reprezentován * src na odpovídající reprezentaci širokých znaků a je uložen v poli širokých znaků, na které ukazuje dest. Do cíle je zapsáno maximálně jen širokých znaků.
Proces převodu je podobný opakovanému volání mbrtowc (). Převod se zastaví, pokud:
- Vícebajtový nulový znak byl převeden a uložen. V tomto případě je src nastaveno na null a ps představuje počáteční stav posunu.
- Byl zjištěn neplatný vícebajtový znak. V tomto případě je src nastaven tak, aby ukazoval na začátek prvního nepřevedeného vícebajtového znaku.
- jen široký znak byl uložen do cíle. V tomto případě je src nastaven tak, aby ukazoval na začátek prvního nepřevedeného vícebajtového znaku.
mbsrtowcs () parametry
- dest: Ukazatel na pole, kde je uložen převedený široký znak.
- src: Ukazatel na ukazatel na první vícebajtový znak, který se má převést.
- len: Maximální počet širokých znaků pro uložení.
- ps: Ukazatel na stav převodu použitý při interpretaci vícebajtového řetězce
mbsrtowcs () Návratová hodnota
- Při úspěchu vrátí funkce mbsrtowcs () počet širokých znaků zapsaných do cíle s výjimkou ukončujícího širokého znaku null. Pokud je dest nulový ukazatel, vrátí počet širokých znaků, které by byly napsány s ohledem na neomezenou délku.
- Při chybě převodu se vrátí -1 a errno je nastaveno na EILSEQ .
Příklad: Jak funguje funkce 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; )
Když spustíte program, výstup bude:
Počet napsaných širokých znaků (kromě L " 0") = 4 Široký znak = ݣݗݿݟ