std:: wcrtomb
|
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
|
|