La funzione mbrtoc16 () in C ++ converte un carattere multibyte stretto in una rappresentazione di caratteri a 16 bit.
La funzione mbrtoc16 () è definita nel file di intestazione.
prototipo mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
La funzione mbrtoc16 () converte al massimo n carattere multibyte rappresentato da s nel suo equivalente carattere utf-16 e lo memorizza nella posizione di memoria puntata da pc16.
Se s rappresenta un puntatore nullo, i valori di ne pc16 vengono ignorati e la chiamata a è equivalente a mbrtoc16 (NULL, "", 1, ps).
Se il carattere risultante prodotto è nullo, lo stato di conversione * ps rappresenta lo stato di spostamento iniziale.
Parametri mbrtoc16 ()
- pc16: puntatore alla posizione di memoria per memorizzare il carattere a 16 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.
mbrtoc16 () Restituisce il valore
La funzione mbrtoc16 () 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 16 bit.
- -3 se il successivo
char16_t
da un carattere multi-char16_t (ad esempio una coppia surrogata) è stato ora scritto in * pc16. 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 * pc16.
- -1 se si verifica un errore di codifica. In questo caso non viene scritto nulla in * pc16, errno è impostato su EILSEQ e il valore di * ps non è specificato.
Esempio: come funziona la funzione mbrtoc16 ()?
#include #include #include #include using namespace std; int main(void) ( char16_t pc16; char s() = "x" ; mbstate_t ps(); int length; length = mbrtoc16(&pc16, s, MB_CUR_MAX, &ps); if (length < 0) ( perror("mbrtoc16() fails to convert"); exit(-1); ) cout << "Multibyte string = " << s << endl; cout << "Length = " << length << endl; printf ("16-bit character = 0x%04hx", pc16); return 0; )
Quando esegui il programma, l'output sarà:
Stringa multibyte = x Lengt> h = 1 carattere a 16 bit = 0x0078