C ++ mbsrtowcs () - C ++ standardna biblioteka

Funkcija mbsrtowcs () u C ++ pretvara uski višebajtni slijed u širok slikovni niz (tipa wchar_t).

Funkcija mbsrtowcs () definirana je u datoteci zaglavlja.

prototip mbsrtowcs ()

 size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);

Funkcija mbsrtowcs () pretvara višebajtni niz znakova čiji je prvi bajt predstavljen * src u odgovarajući široki prikaz znakova i pohranjen je u široki niz znakova na koji pokazuje dest. U dest se upisuje maksimum dugih znakova.

Postupak pretvorbe sličan je pozivanju mbrtowc () uzastopno. Pretvorba se zaustavlja ako:

  • Višebajtni null znak pretvoren je i pohranjen. U ovom slučaju, src je postavljen na nulu, a ps predstavlja početno stanje pomaka.
  • Nađen je nevažeći višebajtni znak. U ovom je slučaju src postavljen tako da usmjerava na početak prvog nekonvertiranog višebajtnog znaka.
  • len širok lik pohranjen je u dest. U ovom je slučaju src postavljen tako da usmjerava na početak prvog nekonvertiranog višebajtnog znaka.

mbsrtowcs () Parametri

  • dest: Pokazivač na niz u kojem je pohranjeni pretvoreni široki znak.
  • src: pokazivač na pokazivač na prvi multibajtni znak koji se pretvara.
  • len: Maksimalan broj širokih znakova za pohranu.
  • ps: pokazivač na stanje pretvorbe koje se koristi pri tumačenju višebajtnog niza

mbsrtowcs () Povratna vrijednost

  • Nakon uspjeha, funkcija mbsrtowcs () vraća broj širokih znakova zapisanih u dest, isključujući završni širok null znak. Ako je dest null pokazivač, vraća broj širokih znakova koji bi bili napisani s obzirom na neograničenu duljinu.
  • U slučaju pogreške pretvorbe, -1 se vraća, a errno se postavlja na EILSEQ .

Primjer: Kako funkcionira funkcija 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; )

Kada pokrenete program, izlaz će biti:

 Broj napisanih širokih znakova (isključujući L " 0") = 4 Široki znak = ݣݗݿݟ

Zanimljivi članci...