La funzione mbsrtowcs () in C ++ converte una sequenza di caratteri multibyte stretta in una sequenza di caratteri ampia (di tipo wchar_t).
La funzione mbsrtowcs () è definita nel file di intestazione.
Prototipo mbsrtowcs ()
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
La funzione mbsrtowcs () converte la stringa di caratteri multibyte il cui primo byte è rappresentato da * src nella corrispondente rappresentazione di caratteri wide ed è memorizzata nella matrice di caratteri wide a cui punta dest. Un massimo di caratteri len larghi viene scritto in dest.
Il processo di conversione è simile alla chiamata ripetuta di mbrtowc (). La conversione si interrompe se:
- Un carattere null multibyte è stato convertito e memorizzato. In questo caso, src è impostato su null e ps rappresenta lo stato di spostamento iniziale.
- È stato rilevato un carattere multibyte non valido. In questo caso, src è impostato per puntare l'inizio del primo carattere multibyte non convertito.
- len wide character è stato memorizzato in dest. In questo caso, src è impostato per puntare l'inizio del primo carattere multibyte non convertito.
Parametri mbsrtowcs ()
- dest: puntatore all'array in cui è memorizzato il carattere wide convertito.
- src: puntatore al puntatore al primo carattere multibyte da convertire.
- len: numero massimo di caratteri da memorizzare.
- ps: puntatore allo stato di conversione utilizzato durante l'interpretazione della stringa multibyte
mbsrtowcs () Restituisce il valore
- In caso di esito positivo, la funzione mbsrtowcs () restituisce il numero di caratteri larghi scritti in dest escluso il carattere null ampio di terminazione. Se dest è un puntatore nullo, restituisce il numero di caratteri larghi che sarebbero stati scritti considerando una lunghezza illimitata.
- In caso di errore di conversione, viene restituito -1 e errno viene impostato su EILSEQ .
Esempio: come funziona la funzione 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; )
Quando esegui il programma, l'output sarà:
Numero di caratteri larghi scritti (esclusa L " 0") = 4 Caratteri larghi = ݣݗݿݟ