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