Funkce mbrtoc16 () v C ++ převádí úzký vícebajtový znak na 16bitovou reprezentaci znaků.
Funkce mbrtoc16 () je definována v hlavičkovém souboru.
prototyp mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
Funkce mbrtoc16 () převádí maximálně n vícebajtových znaků představovaných s na její ekvivalentní znak utf-16 a ukládá je do paměťového umístění, na které ukazuje pc16.
Pokud s představuje nulový ukazatel, hodnoty n a pc16 jsou ignorovány a volání je ekvivalentní mbrtoc16 (NULL, "", 1, ps).
Pokud je výsledný vytvořený znak null, stav převodu * ps představuje počáteční stav posunu.
Parametry mbrtoc16 ()
- pc16: Ukazatel na místo v paměti pro uložení výsledného 16bitové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.
mbrtoc16 () Vrátit hodnotu
Funkce mbrtoc16 () 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 16bitový znak.
- -3, pokud byl další
char16_t
znak ze znaku multi-char16_t (např. Náhradní pár) nyní zapsán do * pc16. 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 * pc16.
- -1, pokud dojde k chybě kódování. V tomto případě není nic zapsáno do * pc16, errno je nastaveno na EILSEQ a hodnota * ps je nespecifikována.
Příklad: Jak funguje funkce mbrtoc16 ()?
#include #include #include #include using namespace std; int main(void) ( char16_t pc16; char s() = "x" ; mbstate_t ps(); int length; length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc16() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("16-bit character = 0x%04hx", pc16); return 0; )
Když spustíte program, výstup bude:
Vícebajtový řetězec = x Lengt> h = 1 16bitový znak = 0x0078