De functie mbrtoc16 () in C ++ converteert een smal multibyte-teken naar een 16-bits tekenweergave.
De functie mbrtoc16 () is gedefinieerd in het headerbestand.
mbrtoc16 () prototype
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
De functie mbrtoc16 () converteert maximaal n multibyte-teken vertegenwoordigd door s naar het equivalente utf-16-teken en slaat het op in de geheugenlocatie waarnaar pc16 verwijst.
Als s een null-pointer vertegenwoordigt, worden de waarden van n en pc16 genegeerd en is de aanroep naar mbrtoc16 (NULL, "", 1, ps).
Als het resulterende geproduceerde teken nul is, vertegenwoordigt de conversietoestand * ps de aanvankelijke schakeltoestand.
mbrtoc16 () Parameters
- pc16: Pointer naar de geheugenlocatie om het resulterende 16 bit-teken op te slaan.
- s: Pointer naar het multibyte-teken dat moet worden geconverteerd.
- n: Maximaal aantal bytes in s om te converteren.
- ps: een pointer naar een mbstate_t-object dat wordt gebruikt bij het interpreteren van de multibyte-string.
mbrtoc16 () Retourwaarde
De functie mbrtoc16 () retourneert de eerste van de volgende waarde die overeenkomt met de onderstaande gevallen:
- 0 als het geconverteerde teken een nul-teken is.
- het aantal bytes (maximaal n) van het multibyte-teken dat met succes is geconverteerd naar een 16-bits teken.
- -3 als het volgende
char16_t
van een multi-char16_t-teken (bijvoorbeeld een surrogaatpaar) nu naar * pc16 is geschreven. In dit geval worden er geen bytes uit de invoer verwerkt. - -2 als de volgende n bytes een onvolledig, maar tot dusverre geldig multibyte-teken vormen. In dit geval wordt er niets naar * pc16 geschreven.
- -1 als er een coderingsfout optreedt. In dit geval wordt er niets naar * pc16 geschreven, wordt errno ingesteld op EILSEQ en is de waarde van * ps niet gespecificeerd.
Voorbeeld: hoe werkt de functie 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; )
Wanneer u het programma uitvoert, is de uitvoer:
Multibyte-reeks = x Lengt> h = 1 16-bits teken = 0x0078