std:: mbtowc
|
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ß水𝄋
` 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
|
|