C ++ wcsrtombs () - C ++ standardowa biblioteka

Funkcja wcsrtombs () w C ++ konwertuje szeroką sekwencję znaków na wąską sekwencję znaków wielobajtowych.

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

wcsrtombs () prototyp

 size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);

Funkcja wcsrtombs () konwertuje szeroki ciąg znaków reprezentowany przez * src na odpowiadający mu wielobajtowy ciąg znaków i jest przechowywany w tablicy znaków wskazywanej przez dest, jeśli dest nie jest null. Do dest zapisywanych jest maksymalnie len znaków.

Proces konwersji jest podobny do wielokrotnego wywoływania wcrtomb (). Konwersja zatrzymuje się, jeśli:

  • Szeroki znak zerowy został przekonwertowany i zapisany. W tym przypadku src ma wartość null, a ps reprezentuje początkowy stan przesunięcia.
  • Napotkano nieprawidłowy szeroki znak. W tym przypadku src jest ustawione tak, aby wskazywało początek pierwszego niezmienionego szerokiego znaku.
  • len bajtów zostało zapisane w dest. W tym przypadku src jest ustawiane tak, aby wskazywało początek pierwszego niezmienionego szerokiego znaku.

wcsrtombs () Parametry

  • > dest: wskaźnik do tablicy znaków, w której jest przechowywany przekonwertowany znak wielobajtowy.
  • src: Wskaźnik do pierwszego szerokiego znaku do konwersji.
  • len: Maksymalna liczba bajtów dostępnych w tablicy dest.
  • ps: wskaźnik do obiektu stanu konwersji.

wcsrtombs () Wartość zwracana

  • Po pomyślnym zakończeniu funkcja wcsrtombs () zwraca liczbę znaków wielobajtowych zapisanych w dest, z wyłączeniem kończącego znaku szerokiego null, ale z uwzględnieniem sekwencji przesunięć.
    Jeśli dest jest pustym wskaźnikiem, zwraca liczbę szerokich znaków, które zostałyby zapisane, z wyłączeniem kończącego znaku null.
  • W przypadku błędu konwersji zwracane jest -1 i ustawiane errno na EILSEQ .

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

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const wchar_t* wstr = L"u0763u0757u077fu075f"; char str(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = wcsrtombs(str, &wstr, len, &ps); cout << "Number of multibyte characters written (excluding "\0 ") = " << retVal << endl; cout << "Multibyte character = " << str << endl; return 0; )

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

 Liczba zapisanych znaków wielobajtowych (z wyłączeniem „ 0”) = 8 Znak wielobajtowy = ݣݗݿݟ

Interesujące artykuły...