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 = ݣݗݿݟ