Funkcija wcsrtombs () u C ++ pretvara široki niz znakova u uski višebajtni niz znakova.
Funkcija wcsrtombs () definirana je u zaglavnoj datoteci.
prototip wcsrtombs ()
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Funkcija wcsrtombs () pretvara široki niz znakova predstavljen * src u odgovarajući višebajtni niz znakova i pohranjuje se u niz znakova na koji pokazuje dest ako dest nije null. U dest se upisuje najviše sljedećeg broja znakova:
Postupak pretvorbe sličan je pozivanju wcrtomb () uzastopno. Pretvorba se zaustavlja ako:
- Široki 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 široki lik. U ovom je slučaju src postavljen tako da usmjerava na početak prvog nekonvertiranog širokog znaka.
- len bajtovi pohranjeni su u dest. U ovom je slučaju src postavljen tako da usmjerava na početak prvog nekonvertiranog širokog znaka.
wcsrtombs () parametri
- > dest: Pokazivač na niz znakova u kojem je pohranjeni pretvoreni višebajtni znak.
- src: pokazivač na pokazivač na prvi široki znak koji treba pretvoriti.
- len: Maksimalan broj bajtova dostupan u dest nizu.
- ps: Pokazivač na objekt stanja pretvorbe.
wcsrtombs () Povratna vrijednost
- Nakon uspjeha, funkcija wcsrtombs () vraća broj višebajtnih znakova zapisanih u destinaciju, isključujući završni široki null znak, ali uključujući nizove pomaka.
Ako je dest null pokazivač, vraća broj širokih znakova koji bi bili napisani, isključujući završni null znak. - U slučaju pogreške pretvorbe, -1 se vraća, a errno se postavlja na EILSEQ .
Primjer: Kako funkcionira funkcija 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; )
Kada pokrenete program, izlaz će biti:
Broj zapisanih višebajtnih znakova (isključujući " 0") = 8 Višebajtnih znakova = ݣݗݿݟ