Namespaces
Variants

std:: mbtowc

From cppreference.net
Défini dans l'en-tête <cstdlib>
int mbtowc ( wchar_t * pwc, const char * s, std:: size_t n ) ;

Convertit un caractère multioctet dont le premier octet est pointé par s en un caractère large, écrit dans * pwc si pwc n'est pas nul.

Si s est un pointeur nul, réinitialise l'état de conversion global et détermine si les séquences de décalage sont utilisées.

Table des matières

Paramètres

s - pointeur vers le caractère multi-octets
n - limite du nombre d'octets dans s pouvant être examinés
pwc - pointeur vers le caractère large en sortie

Valeur de retour

Si s n'est pas un pointeur nul, retourne le nombre d'octets contenus dans le caractère multioctet ou - 1 si les premiers octets pointés par s ne forment pas un caractère multioctet valide ou 0 si s pointe vers le caractère nul ' \0 ' .

Si s est un pointeur nul, réinitialise son état de conversion interne pour représenter l'état de décalage initial et retourne 0 si l'encodage multioctet actuel n'est pas dépendant de l'état (n'utilise pas de séquences de décalage) ou une valeur non nulle si l'encodage multioctet actuel est dépendant de l'état (utilise des séquences de décalage).

Notes

Chaque appel à mbtowc met à jour l'état de conversion global interne (un objet statique de type std::mbstate_t , uniquement connu de cette fonction). Si l'encodage multioctet utilise des états de changement, il faut veiller à éviter le retour en arrière ou les analyses multiples. Dans tous les cas, plusieurs threads ne devraient pas appeler mbtowc sans synchronisation : std::mbrtowc peut être utilisé à la place.

Exemple

#include <clocale>
#include <cstdlib>
#include <cstring>
#include <iostream>
int print_mb(const char* ptr)
{
    std::mbtowc(nullptr, 0, 0); // reset the conversion state
    const char* end = ptr + std::strlen(ptr);
    int ret{};
    for (wchar_t wc; (ret = std::mbtowc(&wc, ptr, end - ptr)) > 0; ptr += ret)
        std::wcout << wc;
    std::wcout << '\n';
    return ret;
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const char* str = "z\u00df\u6c34\U0001d10b"; // or "zß水𝄋"
                      // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b";
    print_mb(str);
}

Sortie :

zß水𝄋
**Traductions effectuées :** - "Run this code" → "Exécuter ce code" - "Output:" → "Sortie :" **Éléments préservés :** - Toutes les balises HTML et leurs attributs - Le code C++ dans les balises `
` et ``
- Les commentaires dans le code C++
- Les termes spécifiques au C++ (fonctions, types, etc.)
- La sortie du programme
- La mise en forme originale

Voir aussi

convertit le caractère multioctet suivant en caractère large, en tenant compte de l'état
(fonction)
retourne le nombre d'octets dans le prochain caractère multioctet
(fonction)
[virtual]
convertit une chaîne de ExternT vers InternT , par exemple lors de la lecture depuis un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
Documentation C pour mbtowc