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