Funkce mbrtoc32 () v C ++ převádí úzký vícebajtový znak na 32bitovou reprezentaci znaků.
Funkce mbrtoc32 () je definována v hlavičkovém souboru.
prototyp mbrtoc32 ()
size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
Funkce mbrtoc32 () převede maximálně n vícebajtový znak reprezentovaný s na jeho ekvivalentní znak utf-32 a uloží jej do umístění paměti, na které ukazuje pc32.
Pokud s představuje nulový ukazatel, jsou hodnoty n a pc32 ignorovány a volání je ekvivalentní mbrtoc32(NULL, "", 1, ps)
.
Pokud je výsledný vytvořený znak null, stav převodu * ps představuje počáteční stav posunu.
mbrtoc32 () parametry
- pc32: Ukazatel na místo v paměti pro uložení výsledného 32bitového znaku.
- s: Ukazatel na vícebajtový znak, který se má převést.
- n: Maximální počet bajtů v s, které se mají převést.
- ps: Ukazatel na objekt mbstate_t použitý při interpretaci vícebajtového řetězce.
mbrtoc32 () Návratová hodnota
Funkce mbrtoc32 () vrací první z následujících hodnot, která odpovídá níže uvedeným případům:
- 0, pokud je převedený znak nulovým znakem.
- počet bajtů (maximálně n) vícebajtového znaku, který byl úspěšně převeden na 32bitový znak.
- -3, pokud byl další
char32_t
znak ze znaku multi-char32_t (např. Náhradní pár) nyní zapsán do * pc32. V tomto případě se ze vstupu nezpracovávají žádné bajty. - -2 pokud následujících n bajtů představuje neúplný, ale dosud platný vícebajtový znak. V tomto případě není nic zapsáno do * pc32.
- -1, pokud dojde k chybě kódování. V tomto případě není nic zapsáno do * pc32, errno je nastaveno na EILSEQ a hodnota * ps je nespecifikována.
Příklad: Jak funguje funkce 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; )
Když spustíte program, výstup bude:
Vícebajtový řetězec = x Délka = 1 32bitový znak = 0x00000078