Namespaces
Variants

std:: mbrtowc

From cppreference.net
Défini dans l'en-tête <cwchar>
std:: size_t mbrtowc ( wchar_t * pwc,

const char * s,
std:: size_t n,

std:: mbstate_t * ps ) ;

Convertit un caractère multioctet étroit en un caractère large.

Si s n'est pas un pointeur nul, examine au plus n octets de la chaîne de caractères multioctets, en commençant par l'octet pointé par s pour déterminer le nombre d'octets nécessaires pour compléter le prochain caractère multioctet (y compris les séquences de changement). Si la fonction détermine que le prochain caractère multioctet dans s est complet et valide, le convertit en caractère large correspondant et le stocke dans * pwc (si pwc n'est pas nul).

Si s est un pointeur nul, les valeurs de n et pwc sont ignorées et l'appel est équivalent à std :: mbrtowc ( nullptr, "" , 1 , ps ) .

Si le caractère large produit est le caractère nul, l'état de conversion stocké dans * ps est l'état de décalage initial.

Table des matières

Paramètres

pwc - pointeur vers l'emplacement où le caractère large résultant sera écrit
s - pointeur vers la chaîne de caractères multioctets utilisée en entrée
n - limite du nombre d'octets dans s pouvant être examinés
ps - pointeur vers l'état de conversion utilisé lors de l'interprétation de la chaîne multioctets

Valeur de retour

Le premier des éléments suivants qui s'applique :

  • 0 si le caractère converti à partir de s (et stocké dans pwc s'il n'est pas nul) était le caractère nul.
  • le nombre d'octets [ 1 ... n ] du caractère multi-octets converti avec succès à partir de s .
  • static_cast < std:: size_t > ( - 2 ) si les n octets suivants constituent un caractère multi-octets incomplet mais valide jusqu'à présent. Rien n'est écrit dans * pwc .
  • static_cast < std:: size_t > ( - 1 ) si une erreur d'encodage se produit. Rien n'est écrit dans * pwc , la valeur EILSEQ est stockée dans errno et la valeur de * ps reste non spécifiée.

Exemple

#include <clocale>
#include <cstring>
#include <cwchar>
#include <iostream>
void print_mb(const char* ptr)
{
    std::mbstate_t state = std::mbstate_t(); // état initial
    const char* end = ptr + std::strlen(ptr);
    int len;
    wchar_t wc;
    while ((len = std::mbrtowc(&wc, ptr, end-ptr, &state)) > 0)
    {
        std::wcout << "Les prochains " << len << " octets forment le caractère " << wc << '\n';
        ptr += len;
    }
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // Encodage multioctet étroit UTF-8
    const char* str = "z\u00df\u6c34\U0001d10b"; // ou u8"zß水𝄋"
                      // ou "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    print_mb(str);
}

Sortie :

Les prochains 1 octets forment le caractère z
Les prochains 2 octets forment le caractère ß
Les prochains 3 octets forment le caractère 水
Les prochains 4 octets forment le caractère 𝄋

Voir aussi

convertit le caractère multioctet suivant en caractère large
(fonction)
convertit un caractère large en sa représentation multioctet, avec état donné
(fonction)
[virtual]
convertit une chaîne de ExternT vers InternT , comme lors de la lecture depuis un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
Documentation C pour mbrtowc