Funkcja mbrtoc16 () w C ++ konwertuje wąski znak wielobajtowy na 16-bitową reprezentację znaku.
Funkcja mbrtoc16 () jest zdefiniowana w pliku nagłówkowym.
prototyp mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
Funkcja mbrtoc16 () konwertuje co najwyżej n wielobajtowego znaku reprezentowanego przez s na odpowiadający mu znak utf-16 i zapisuje go w lokalizacji pamięci wskazywanej przez pc16.
Jeśli s reprezentuje pusty wskaźnik, wartości n i pc16 są ignorowane, a wywołanie jest równoważne z mbrtoc16 (NULL, "", 1, ps).
Jeśli wynikowy znak jest pusty, stan konwersji * ps reprezentuje początkowy stan przesunięcia.
mbrtoc16 () Parametry
- pc16: Wskaźnik do lokalizacji pamięci, w której ma zostać zapisany wynikowy znak 16-bitowy.
- s: wskaźnik do znaku wielobajtowego do konwersji.
- n: Maksymalna liczba bajtów w s do konwersji.
- ps: wskaźnik do obiektu mbstate_t używanego podczas interpretacji ciągu wielobajtowego.
mbrtoc16 () Wartość zwracana
Funkcja mbrtoc16 () zwraca pierwszą z następujących wartości, która pasuje do poniższych przypadków:
- 0, jeśli przekonwertowany znak jest znakiem null.
- liczba bajtów (najwyżej n) znaku wielobajtowego, który został pomyślnie przekonwertowany na znak 16-bitowy.
- -3 jeśli następny
char16_t
ze znaku multi-char16_t (np. Para zastępcza) został teraz zapisany do * pc16. W tym przypadku żadne bajty z wejścia nie są przetwarzane. - -2, jeśli kolejnych n bajtów stanowi niekompletny, ale jak dotąd prawidłowy znak wielobajtowy. W tym przypadku nic nie jest zapisywane do * pc16.
- -1, jeśli wystąpi błąd kodowania. W tym przypadku nic nie jest zapisywane do * pc16, errno jest ustawiane na EILSEQ, a wartość * ps jest nieokreślona.
Przykład: Jak działa funkcja 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; )
Po uruchomieniu programu wynik będzie następujący:
Ciąg wielobajtowy = x Lengt> h = 1 znak 16-bitowy = 0x0078