C ++ mbsrtowcs () - standardní knihovna C ++

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 = ݣݗݿݟ

Zajímavé články...