Funkcija mbsrtowcs () v jeziku C ++ pretvori ozko večbajtno zaporedje znakov v široko zaporedje znakov (tipa wchar_t).
Funkcija mbsrtowcs () je definirana v datoteki glave.
prototip mbsrtowcs ()
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
Funkcija mbsrtowcs () pretvori večbajtni znakovni niz, katerega prvi bajt je predstavljen z * src, v ustrezno široko predstavitev znakov in je shranjena v širokem polju znakov, na katerega kaže dest. V dest je zapisano največ len širokih znakov.
Postopek pretvorbe je podoben večkratnemu klicanju mbrtowc (). Pretvorba se ustavi, če:
- Pretvorjen in shranjen je bil večbajtni ničelni znak. V tem primeru je src nastavljen na nič in ps predstavlja začetno stanje premika.
- Prišlo je do neveljavnega večbajtnega znaka. V tem primeru je src nastavljen tako, da kaže na začetek prvega pretvorjenega večbajtnega znaka.
- len širok znak je bil shranjen v dest. V tem primeru je src nastavljen tako, da kaže na začetek prvega pretvorjenega večbajtnega znaka.
mbsrtowcs () Parametri
- dest: Kazalec na matriko, v kateri je shranjen pretvorjeni široki znak.
- src: Kazalec na kazalec na prvi večbajtni znak, ki ga želite pretvoriti.
- len: Največje število znakov za shranjevanje.
- ps: Kazalec na stanje pretvorbe, ki se uporablja pri interpretaciji večbajtnega niza
mbsrtowcs () Vrnjena vrednost
- Po uspehu funkcija mbsrtowcs () vrne število širokih znakov, zapisanih v dest, brez zaključnega širokega ničelnega znaka. Če je dest ničelni kazalec, vrne število širokih znakov, ki bi bili napisani glede na neomejeno dolžino.
- Ob napaki pretvorbe se vrne -1 in errno se nastavi na EILSEQ .
Primer: Kako deluje 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; )
Ko zaženete program, bo rezultat:
Število napisanih širokih znakov (brez L " 0") = 4 Široki znak = ݣݗݿݟ