C ++ mbrtowc () - Libreria standard C ++

La funzione mbrtowc () in C ++ converte un carattere multibyte stretto in un carattere ampio (di tipo wchar_t).

La funzione mbrtowc () è definita nel file di intestazione.

Prototipo mbrtowc ()

 size_t mbrtowc (wchar_t * pwc, const char * s, size_t n, mbstate_t * ps);

La funzione mbrtowc () converte il carattere multibyte rappresentato da s in un carattere ampio e viene memorizzato nell'indirizzo puntato da pwc.

  • Se s non è un puntatore nullo, vengono esaminati un massimo di n byte a partire dal byte puntato da s per determinare il numero di byte necessari per completare il successivo carattere multibyte (comprese eventuali sequenze di spostamento).
    Se il successivo n carattere multibyte in s è completo e valido, la funzione lo converte nel corrispondente carattere largo e viene memorizzato nella posizione puntata da pwc.
  • Se s è un puntatore nullo, i parametri ne pwc non hanno nulla a che fare con la chiamata di funzione e la chiamata è equivalente a std::mbrtowc(NULL, "", 1, ps).
  • Se il carattere largo prodotto è un carattere nullo, lo stato di conversione memorizzato in * ps è lo stato di spostamento iniziale.

Parametri mbrtowc ()

  • pwc: puntatore all'indirizzo di memoria in cui è memorizzato il carattere wide convertito.
  • s: puntatore al carattere multibyte da convertire.
  • n: numero massimo di byte in s da esaminare.
  • ps: puntatore allo stato di conversione utilizzato durante l'interpretazione della stringa multibyte

mbrtowc () Restituisce il valore

La funzione mbrtowc () restituisce il primo dei seguenti validi:

  • 0 se il carattere largo convertito da s è nullo (se pwc non è nullo).
  • Il numero di caratteri multibyte convertiti con successo da s.
  • -2 se i successivi n byte non rappresentano un carattere multibyte completo.
  • -1 è un errore di codifica, errno è impostato su EILSEQ .

Esempio: come funziona la funzione mbrtowc ()?

 #include #include #include using namespace std; void test_mbrtowc(const char *s, size_t n) ( mbstate_t ps = mbstate_t(); wchar_t wc; int retVal = mbrtowc(&wc, s, n, &ps); if (retVal == -2) wcout << L"Next " << n << L" byte(s) doesn't represent a complete multibyte character" << endl; else if (retVal == -1) wcout << L"Next " << n << L" byte(s) doesn't represent a valid multibyte character" << endl; else if (retVal == 0) wcout << L"The converted wide character is a null wide character" << endl; else ( wcout << L"Next " << n << L" byte(s) hold " << retVal << L" bytes of multibyte character, "; wcout << L"Resulting wide character is " << wc << endl; ) ) int main() ( setlocale(LC_ALL, "en_US.utf8"); char str1() = "u00b5"; char str2() = ""; test_mbrtowc(str1, 1); test_mbrtowc(str1, 5); test_mbrtowc(str2, 5); return 0; )

Quando esegui il programma, l'output sarà:

 Il prossimo 1 byte non rappresenta un carattere multibyte completo I successivi 5 byte contengono 2 byte di carattere multibyte, Il carattere largo risultante è µ Il carattere largo convertito è un carattere largo nullo

Articoli interessanti...