Funkcija mbrtoc16 () v jeziku C ++ pretvori ozek večbajtni znak v 16-bitno predstavitev znakov.
Funkcija mbrtoc16 () je definirana v datoteki glave.
prototip mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
Funkcija mbrtoc16 () pretvori največ n večbajtnih znakov, ki jih predstavlja s, v enakovreden znak utf-16 in jih shrani v pomnilniško mesto, na katerega kaže pc16.
Če s predstavlja ničelni kazalec, se vrednosti n in pc16 prezrejo, klic na pa je enak mbrtoc16 (NULL, "", 1, ps).
Če je nastali znak nič, stanje pretvorbe * ps predstavlja začetno stanje premika.
mbrtoc16 () Parametri
- pc16: Kazalec na mesto v pomnilniku, da shranite nastali 16-bitni znak.
- s: Kazalec na večbajtni znak za pretvorbo.
- n: največje število bajtov v s za pretvorbo.
- ps: Kazalec na objekt mbstate_t, ki se uporablja pri interpretaciji večbajtnega niza.
mbrtoc16 () Vrnjena vrednost
Funkcija mbrtoc16 () vrne prvo od naslednjih vrednosti, ki se ujema s spodnjimi primeri:
- 0, če je pretvorjeni znak ničen.
- število bajtov (največ n) večbajtnega znaka, ki je bil uspešno pretvorjen v 16-bitni znak.
- -3, če je naslednji
char16_t
od znaka multi-char16_t (npr. Nadomestni par) zapisan v * pc16. V tem primeru se od vnosa ne obdela noben bajt. - -2, če naslednjih n bajtov predstavlja nepopoln, a zaenkrat veljaven večbajtni znak. V tem primeru na * pc16 ni zapisano nič.
- -1, če pride do napake pri kodiranju. V tem primeru v * pc16 ni zapisano nič, errno je nastavljeno na EILSEQ in vrednost * ps ni določena.
Primer: Kako deluje funkcija 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; )
Ko zaženete program, bo rezultat:
Večbajtni niz = x Dolžina> h = 1 16-bitni znak = 0x0078