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

La fonction mbrtowc () en C ++ convertit un caractère multi-octets étroit en un caractère large (de type wchar_t).

La fonction mbrtowc () est définie dans le fichier d'en-tête.

prototype mbrtowc ()

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

La fonction mbrtowc () convertit le caractère multi-octets représenté par s en caractère large et est stocké dans l'adresse pointée par pwc.

  • Si s n'est pas un pointeur nul, un maximum de n octets à partir de l'octet pointé par s est examiné afin de déterminer le nombre d'octets nécessaires pour compléter le caractère multi-octets suivant (y compris les séquences de décalage).
    Si le caractère multioctet n suivant dans s est complet et valide, la fonction le convertit en caractère large correspondant et est stocké à l'emplacement indiqué par pwc.
  • Si s est un pointeur nul, les paramètres n et pwc n'ont rien à voir avec l'appel de fonction et l'appel est équivalent à std::mbrtowc(NULL, "", 1, ps).
  • Si le caractère large produit est un caractère nul, l'état de conversion stocké dans * ps est l'état de décalage initial.

Paramètres de mbrtowc ()

  • pwc: pointeur vers l'adresse mémoire où le caractère large converti est stocké.
  • s: pointeur vers le caractère multi-octets à convertir.
  • n: nombre maximum d'octets en s à examiner.
  • ps: pointeur vers l'état de conversion utilisé lors de l'interprétation de la chaîne multi-octets

mbrtowc () Valeur de retour

La fonction mbrtowc () renvoie le premier des éléments suivants qui est valide:

  • 0 si le caractère large converti à partir de s est nul (si pwc n'est pas nul).
  • Le nombre de caractères multi-octets convertis avec succès à partir de s.
  • -2 si les n octets suivants ne représentent pas un caractère multi-octets complet.
  • -1 est une erreur de codage, errno est défini sur EILSEQ .

Exemple: Comment fonctionne la fonction 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; )

Lorsque vous exécutez le programme, la sortie sera:

 Le ou les 1 octets suivants ne représentent pas un caractère multioctet complet Les 5 octets suivants contiennent 2 octets de caractère multioctet, le caractère large résultant est µ Le caractère large converti est un caractère large nul

Articles intéressants...