La fonction mbrtoc16 () en C ++ convertit un caractère multioctet étroit en une représentation de caractère 16 bits.
La fonction mbrtoc16 () est définie dans le fichier d'en-tête.
prototype mbrtoc16 ()
size_t mbrtoc16 (char16_t * pc16, const char * s, size_t n, mbstate_t * ps);
La fonction mbrtoc16 () convertit au plus n caractères multi-octets représentés par s en son équivalent utf-16 et le stocke dans l'emplacement mémoire pointé par pc16.
Si s représente un pointeur nul, les valeurs de n et pc16 sont ignorées et l'appel à est équivalent à mbrtoc16 (NULL, "", 1, ps).
Si le caractère résultant produit est nul, l'état de conversion * ps représente l'état de décalage initial.
Paramètres de mbrtoc16 ()
- pc16: pointeur vers l'emplacement mémoire pour stocker le caractère 16 bits résultant.
- s: pointeur vers le caractère multi-octets à convertir.
- n: nombre maximum d'octets en s à convertir.
- ps: Un pointeur vers un objet mbstate_t utilisé lors de l'interprétation de la chaîne multi-octets.
mbrtoc16 () Valeur de retour
La fonction mbrtoc16 () renvoie la première des valeurs suivantes qui correspond aux cas ci-dessous:
- 0 si le caractère converti est un caractère nul.
- le nombre d'octets (au plus n) du caractère multi-octets qui a été converti avec succès en caractère 16 bits.
- -3 si le suivant
char16_t
d'un caractère multi-char16_t (par exemple une paire de substitution) a maintenant été écrit dans * pc16. Aucun octet n'est traité à partir de l'entrée dans ce cas. - -2 si les n octets suivants constituent un caractère multi-octets incomplet, mais jusqu'à présent valide. Dans ce cas, rien n'est écrit dans * pc16.
- -1 si une erreur de codage se produit. Dans ce cas, rien n'est écrit dans * pc16, errno est défini sur EILSEQ et la valeur de * ps n'est pas spécifiée.
Exemple: Comment fonctionne la fonction 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; )
Lorsque vous exécutez le programme, la sortie sera:
Chaîne multi-octets = x Lengt> h = 1 caractère 16 bits = 0x0078