C ++ mbrtoc32 () - C ++ standardowa biblioteka

Funkcja mbrtoc32 () w C ++ konwertuje wąski znak wielobajtowy na 32-bitową reprezentację znaku.

Funkcja mbrtoc32 () jest zdefiniowana w pliku nagłówkowym.

prototyp mbrtoc32 ()

 size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);

Funkcja mbrtoc32 () konwertuje co najwyżej n wielobajtowego znaku reprezentowanego przez s na odpowiadający mu znak utf-32 i przechowuje go w miejscu pamięci wskazywanym przez pc32.

Jeśli s reprezentuje pusty wskaźnik, wartości n i pc32 są ignorowane, a wywołanie jest równoważne mbrtoc32(NULL, "", 1, ps).

Jeśli wynikowy znak jest pusty, stan konwersji * ps reprezentuje początkowy stan przesunięcia.

mbrtoc32 () Parametry

  • pc32: Wskaźnik do lokalizacji pamięci, w której ma zostać zapisany wynikowy znak 32-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.

mbrtoc32 () Wartość zwracana

Funkcja mbrtoc32 () 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 (maksymalnie n) znaku wielobajtowego, który został pomyślnie przekonwertowany na znak 32-bitowy.
  • -3, jeśli następny char32_tze znaku multi-char32_t (np. Para zastępcza) został teraz zapisany do * pc32. 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 * pc32.
  • -1, jeśli wystąpi błąd kodowania. W tym przypadku nic nie jest zapisywane do * pc32, errno jest ustawiane na EILSEQ, a wartość * ps jest nieokreślona.

Przykład: Jak działa funkcja 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; )

Po uruchomieniu programu wynik będzie następujący:

 Ciąg wielobajtowy = x Długość = 1 znak 32-bitowy = 0x00000078

Interesujące artykuły...