Funkcija mbrtoc32 () na C ++ pretvara uski višebajtni znak u 32-bitni prikaz znakova.
Funkcija mbrtoc32 () definirana je u zaglavnoj datoteci.
prototip mbrtoc32 ()
size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
Funkcija mbrtoc32 () pretvara najviše n višebajtnih znakova predstavljenih s u ekvivalentni utf-32 znak i pohranjuje ih na memorijsko mjesto na koje ukazuje pc32.
Ako s predstavlja null pokazivač, vrijednosti n i pc32 se zanemaruju, a poziv na ekvivalentan je mbrtoc32(NULL, "", 1, ps)
.
Ako je rezultirajući proizvedeni znak nula, stanje pretvorbe * ps predstavlja početno stanje pomaka.
mbrtoc32 () Parametri
- pc32: Pokazivač na memorijsko mjesto za pohranu rezultirajućeg 32-bitnog znaka.
- s: Pokazivač na višebajtni znak za pretvorbu.
- n: Maksimalan broj bajtova u s za pretvorbu.
- ps: Pokazivač na objekt mbstate_t koji se koristi za tumačenje višebajtnog niza.
mbrtoc32 () Povratna vrijednost
Funkcija mbrtoc32 () vraća prvu od sljedećih vrijednosti koja se podudara sa donjim slučajevima:
- 0 ako je pretvoreni znak nulti znak.
- broj bajtova (najviše n) višebajtnog znaka koji je uspješno pretvoren u 32-bitni znak.
- -3 ako je sljedeći
char32_t
iz znaka multi-char32_t (npr. Zamjenski par) sada zapisan na * pc32. U ovom se slučaju bajtovi ne obrađuju od unosa. - -2 ako sljedećih n bajtova čine nepotpuni, ali zasad valjani, višebajtni znak. U ovom slučaju ništa nije zapisano na * pc32.
- -1 ako se dogodi pogreška kodiranja. U ovom slučaju ništa nije zapisano na * pc32, errno je postavljeno na EILSEQ, a vrijednost * ps nije navedena.
Primjer: Kako funkcionira funkcija mbrtoc32 ()?
#include #include #include #include using namespace std; int main(void) ( char32_t pc32; char s() = "x" ; mbstate_t ps; int length; length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc32() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("32-bit character = 0x%08hx", pc32); return 0; )
Kada pokrenete program, izlaz će biti:
Niz od više bajtova = x Duljina = 1 32-bitni znak = 0x00000078