std:: mbrtowc
|
Défini dans l'en-tête
<cwchar>
|
||
|
std::
size_t
mbrtowc
(
wchar_t
*
pwc,
const
char
*
s,
|
||
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
|
|