std:: mbrtoc32
|
Défini dans l'en-tête
<cuchar>
|
||
|
std::
size_t
mbrtoc32
(
char32_t
*
pc32,
const
char
*
s,
|
(depuis C++11) | |
Convertit un caractère multioctet étroit en sa représentation de caractère UTF-32.
Si s n'est pas un pointeur nul, inspecte 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 (incluant toute séquence de changement). Si la fonction détermine que le prochain caractère multioctet dans s est complet et valide, le convertit en caractère 32 bits correspondant et le stocke dans * pc32 (si pc32 n'est pas nul).
Si le caractère multioctet dans
*
s
correspond à une séquence multi-char32_t (impossible avec UTF-32), alors après le premier appel à cette fonction,
*
ps
est mis à jour de telle sorte que les appels suivants à
mbrtoc32
écriront les
char32_t
supplémentaires, sans considérer
*
s
.
Si s est un pointeur nul, les valeurs de n et pc32 sont ignorées et l'appel est équivalent à std :: mbrtoc32 ( nullptr, "" , 1 , ps ) .
Si le caractère large produit est le caractère nul, l'état de conversion * ps représente l'état de décalage initial.
L'encodage multioctet utilisé par cette fonction est spécifié par la locale C actuellement active.
Table des matières |
Paramètres
| pc32 | - | pointeur vers l'emplacement où le caractère 32 bits résultant sera écrit |
| s | - | pointeur vers la chaîne de caractères multioctets utilisée comme entrée |
| n | - | limite du nombre d'octets dans s pouvant être examinés |
| ps | - | pointeur vers l'objet d'é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 * pc32 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 .
- - 3 si le prochain char32_t d'un caractère multi- char32_t a maintenant été écrit dans * pc32 . Aucun octet n'est traité en entrée dans ce cas.
- - 2 si les prochains n octets constituent un caractère multi-octets incomplet mais valide jusqu'à présent. Rien n'est écrit dans * pc32 .
- - 1 si une erreur d'encodage se produit. Rien n'est écrit dans * pc32 , la valeur EILSEQ est stockée dans errno et la valeur de * ps n'est pas spécifiée.
Exemples
#include <cassert> #include <clocale> #include <cstring> #include <cuchar> #include <cwchar> #include <iomanip> #include <iostream> int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::string str = "z\u00df\u6c34\U0001F34C"; // ou u8"zß水🍌" std::cout << "Traitement de " << str.size() << " octets : [ " << std::showbase; for (unsigned char c : str) std::cout << std::hex << +c << ' '; std::cout << "]\n"; std::mbstate_t state{}; // initialisé à zéro pour l'état initial char32_t c32; const char* ptr = str.c_str(), *end = str.c_str() + str.size() + 1; while (std::size_t rc = std::mbrtoc32(&c32, ptr, end - ptr, &state)) { std::cout << "Caractère UTF-32 suivant : " << std::hex << static_cast<int>(c32) << " obtenu à partir de "; assert(rc != (std::size_t) - 3); // pas de substituts en UTF-32 if (rc == (std::size_t) - 1) break; if (rc == (std::size_t) - 2) break; std::cout << std::dec << rc << " octets [ "; for (std::size_t n = 0; n < rc; ++n) std::cout << std::hex << +static_cast<unsigned char>(ptr[n]) << ' '; std::cout << "]\n"; ptr += rc; } }
Sortie :
Traitement de 10 octets : [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c ] Caractère UTF-32 suivant : 0x7a obtenu à partir de 1 octets [ 0x7a ] Caractère UTF-32 suivant : 0xdf obtenu à partir de 2 octets [ 0xc3 0x9f ] Caractère UTF-32 suivant : 0x6c34 obtenu à partir de 3 octets [ 0xe6 0xb0 0xb4 ] Caractère UTF-32 suivant : 0x1f34c obtenu à partir de 4 octets [ 0xf0 0x9f 0x8d 0x8c ]
Voir aussi
|
(C++11)
|
convertit un caractère UTF-32 en encodage multioctet étroit
(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
mbrtoc32
|
|