C ++ mbsrtowcs () - C ++ standardowa biblioteka

Funkcja mbsrtowcs () w C ++ konwertuje wąską sekwencję znaków wielobajtowych na sekwencję znaków szerokich (typu wchar_t).

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

Prototyp mbsrtowcs ()

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

Funkcja mbsrtowcs () konwertuje wielobajtowy ciąg znaków, którego pierwszy bajt jest reprezentowany przez * src, na odpowiednią reprezentację szerokiego znaku i jest przechowywany w tablicy znaków szerokich wskazywanej przez dest. Do dest zapisywane jest maksymalnie len szerokich znaków.

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

  • Wielobajtowy znak null został przekonwertowany i zapisany. W tym przypadku src ma wartość null, a ps reprezentuje początkowy stan przesunięcia.
  • Napotkano nieprawidłowy znak wielobajtowy. W tym przypadku src jest ustawiane tak, aby wskazywał początek pierwszego nieprzetworzonego znaku wielobajtowego.
  • len szeroki znak został zapisany w dest. W tym przypadku src jest ustawiane tak, aby wskazywał początek pierwszego nieprzetworzonego znaku wielobajtowego.

Parametry mbsrtowcs ()

  • dest: wskaźnik do tablicy, w której jest przechowywany skonwertowany szeroki znak.
  • src: Wskaźnik do pierwszego znaku wielobajtowego do konwersji.
  • len: maksymalna liczba znaków szerokich do przechowywania.
  • ps: Wskaźnik do stanu konwersji używanego podczas interpretacji ciągu wielobajtowego

mbsrtowcs () Wartość zwracana

  • Po pomyślnym zakończeniu funkcja mbsrtowcs () zwraca liczbę szerokich znaków zapisanych do dest, z wyłączeniem kończącego szerokiego znaku null. Jeśli dest jest pustym wskaźnikiem, zwraca liczbę szerokich znaków, które zostałyby zapisane, biorąc pod uwagę nieograniczoną długość.
  • W przypadku błędu konwersji zwracane jest -1 i ustawiane errno na EILSEQ .

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

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

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

 Liczba zapisanych szerokich znaków (z wyłączeniem L " 0") = 4 Szeroki znak = ݣݗݿݟ

Interesujące artykuły...