C ++ mbrtoc32 () - standardní knihovna C ++

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_tznak 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

Zajímavé články...