C ++ mbrtoc16 () - Biblioteka standardowa C ++

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

Interesujące artykuły...