La funzione mbrtoc32 () in C ++ converte un carattere multibyte stretto in una rappresentazione di caratteri a 32 bit.
La funzione mbrtoc32 () è definita nel file di intestazione.
Prototipo mbrtoc32 ()
size_t mbrtoc32 (char32_t * pc32, const char * s, size_t n, mbstate_t * ps);
La funzione mbrtoc32 () converte al massimo n carattere multibyte rappresentato da s nel suo equivalente carattere utf-32 e lo memorizza nella posizione di memoria indicata da pc32.
Se s rappresenta un puntatore nullo, i valori di ne pc32 vengono ignorati e la chiamata a è equivalente a mbrtoc32(NULL, "", 1, ps)
.
Se il carattere risultante prodotto è nullo, lo stato di conversione * ps rappresenta lo stato di spostamento iniziale.
Parametri mbrtoc32 ()
- pc32: puntatore alla posizione di memoria per memorizzare il carattere a 32 bit risultante.
- s: puntatore al carattere multibyte da convertire.
- n: numero massimo di byte in s da convertire.
- ps: puntatore a un oggetto mbstate_t utilizzato durante l'interpretazione della stringa multibyte.
mbrtoc32 () Restituisce il valore
La funzione mbrtoc32 () restituisce il primo dei seguenti valori che corrisponde ai casi seguenti:
- 0 se il carattere convertito è un carattere nullo.
- il numero di byte (al massimo n) del carattere multibyte che è stato convertito con successo in un carattere a 32 bit.
- -3 se il successivo
char32_t
da un carattere multi-char32_t (ad esempio una coppia surrogata) è stato ora scritto in * pc32. In questo caso non vengono elaborati byte dall'ingresso. - -2 se i successivi n byte costituiscono un carattere multibyte incompleto, ma finora valido. In questo caso non viene scritto nulla su * pc32.
- -1 se si verifica un errore di codifica. In questo caso non viene scritto nulla su * pc32, errno è impostato su EILSEQ e il valore di * ps non è specificato.
Esempio: come funziona la funzione mbrtoc32 ()?
#include #include #include #include using namespace std; int main(void) ( char32_t pc32; char s() = "x" ; mbstate_t ps; int length; length = mbrtoc32(&pc32, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc32() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("32-bit character = 0x%08hx", pc32); return 0; )
Quando esegui il programma, l'output sarà:
Stringa multibyte = x Lunghezza = 1 carattere a 32 bit = 0x00000078