Namespaces
Variants

std:: wcrtomb

From cppreference.net
Défini dans l'en-tête <cwchar>
std:: size_t wcrtomb ( char * s, wchar_t wc, std:: mbstate_t * ps ) ;

Convertit un caractère large en sa représentation multioctet étroite.

Si s n'est pas un pointeur nul, la fonction détermine le nombre d'octets nécessaires pour stocker la représentation du caractère multioctet de wc (incluant toute séquence de changement, et prenant en compte l'état actuel de conversion multioctet * ps ), et stocke la représentation du caractère multioctet dans le tableau de caractères dont le premier élément est pointé par s , mettant à jour * ps si nécessaire. Au maximum MB_CUR_MAX octets peuvent être écrits par cette fonction.

Si s est un pointeur nul, l'appel est équivalent à std :: wcrtomb ( buf, L ' \0 ' , ps ) pour un tampon interne buf .

Si wc est le caractère large nul L ' \0 ' , un octet nul est stocké, précédé de toute séquence de changement nécessaire pour restaurer l'état de changement initial et le paramètre d'état de conversion * ps est mis à jour pour représenter l'état de changement initial.

Table des matières

Paramètres

s - pointeur vers un tableau de caractères étroits où le caractère multioctet sera stocké
wc - le caractère large à convertir
ps - pointeur vers l'objet d'état de conversion utilisé lors de l'interprétation de la chaîne multioctet

Valeur de retour

En cas de succès, retourne le nombre d'octets (y compris toute séquence de décalage) écrits dans le tableau de caractères dont le premier élément est pointé par s .

En cas d'échec (si wc n'est pas un caractère large valide), retourne static_cast < std:: size_t > ( - 1 ) , stocke EILSEQ dans errno , et laisse * ps dans un état non spécifié.

Exemple

#include <clocale>
#include <cwchar>
#include <iostream>
#include <string>
void print_wide(const std::wstring& wstr)
{
    std::mbstate_t state{};
    for (wchar_t wc : wstr)
    {
        std::string mb(MB_CUR_MAX, '\0');
        std::size_t ret = std::wcrtomb(&mb[0], wc, &state);
        std::cout << "multibyte char " << mb << " is " << ret << " bytes\n";
    }
}
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌"
    print_wide(wstr);
}

Sortie :

multibyte char z is 1 bytes
multibyte char ß is 2 bytes
multibyte char 水 is 3 bytes
multibyte char 🍌 is 4 bytes

Voir aussi

convertit un caractère large en sa représentation multioctet
(fonction)
convertit le prochain caractère multioctet en caractère large, avec état donné
(fonction)
[virtual]
convertit une chaîne de InternT vers ExternT , par exemple lors de l'écriture dans un fichier
(fonction membre protégée virtuelle de std::codecvt<InternT,ExternT,StateT> )
Documentation C pour wcrtomb