C ++ mbrtoc16 () - Bibliothèque standard C ++

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_td'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

Articles intéressants...