C ++ mbrtowc () - C ++ standardowa biblioteka

Funkcja mbrtowc () w C ++ konwertuje wąski znak wielobajtowy na znak szeroki (typu wchar_t).

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

Prototyp mbrtowc ()

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

Funkcja mbrtowc () konwertuje znak wielobajtowy reprezentowany przez s na znak szeroki i jest przechowywana pod adresem wskazywanym przez pwc.

  • Jeśli s nie jest wskaźnikiem zerowym, sprawdzanych jest maksymalnie n bajtów, zaczynając od bajtu wskazywanego przez s, w celu określenia liczby bajtów potrzebnych do uzupełnienia następnego znaku wielobajtowego (w tym wszelkich sekwencji przesunięć).
    Jeśli następny znak wielobajtowy n w s jest kompletny i poprawny, funkcja konwertuje go na odpowiedni znak szeroki i jest przechowywany w lokalizacji wskazywanej przez pwc.
  • Jeśli s jest pustym wskaźnikiem, parametry n oraz pwc nie mają nic wspólnego z wywołaniem funkcji, a wywołanie jest równoważne std::mbrtowc(NULL, "", 1, ps).
  • Jeśli utworzony szeroki znak jest znakiem zerowym, stan konwersji przechowywany w * ps jest początkowym stanem przesunięcia.

mbrtowc () Parametry

  • pwc: Wskaźnik do adresu pamięci, w którym jest przechowywany przekonwertowany znak szeroki.
  • s: wskaźnik do znaku wielobajtowego do konwersji.
  • n: Maksymalna liczba bajtów w s do zbadania.
  • ps: Wskaźnik do stanu konwersji używanego podczas interpretacji ciągu wielobajtowego

mbrtowc () Wartość zwracana

Funkcja mbrtowc () zwraca pierwszą prawidłową wartość:

  • 0, jeśli szeroki znak przekonwertowany z s jest null (jeśli pwc nie jest zerowy).
  • Liczba znaków wielobajtowych, które zostały pomyślnie przekonwertowane z s.
  • -2, jeśli następne n bajtów nie reprezentuje pełnego znaku wielobajtowego.
  • -1 to błąd kodowania, errno jest ustawione na EILSEQ .

Przykład: Jak działa funkcja mbrtowc ()?

 #include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = ""; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )

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

 Następny 1 bajt nie reprezentuje pełnego znaku wielobajtowego Kolejne 5 bajtów zawiera 2 bajty znaku wielobajtowego Wynikowy znak szeroki to µ Przekonwertowany znak szeroki to znak o szerokości zerowej

Interesujące artykuły...