std:: mbrlen
|
Défini dans l'en-tête
<cwchar>
|
||
|
std::
size_t
mbrlen
(
const
char
*
s,
std::
size_t
n,
std::
mbstate_t
*
ps
)
;
|
||
Détermine la taille, en octets, du reste du caractère multioctet dont le premier octet est pointé par s , compte tenu de l'état de conversion actuel ps .
Cette fonction est équivalente à l'appel std:: mbrtowc ( nullptr, s, n, ps ? ps : & internal ) pour un objet caché internal de type std::mbstate_t , sauf que l'expression ps n'est évaluée qu'une seule fois.
Table des matières |
Paramètres
| s | - | pointeur vers un élément d'une chaîne de caractères multioctets |
| n | - | limite du nombre d'octets dans s pouvant être examinés |
| ps | - | pointeur vers la variable contenant l'état de conversion |
Valeur de retour
- 0 si les n octets suivants ou moins complètent le caractère nul.
- Le nombre d'octets (entre 1 et n ) qui complètent un caractère multioctet valide.
- std:: size_t ( - 1 ) si une erreur d'encodage se produit.
- std:: size_t ( - 2 ) si les n octets suivants font partie d'un caractère multioctet potentiellement valide, qui reste incomplet après l'examen de tous les n octets.
Exemple
#include <clocale> #include <cwchar> #include <iostream> #include <string> int main() { // permet à mbrlen() de fonctionner avec l'encodage multioctet UTF-8 std::setlocale(LC_ALL, "en_US.utf8"); // encodage multioctet étroit UTF-8 std::string str = "水"; // or u8"\u6c34" or "\xe6\xb0\xb4" std::mbstate_t mb = std::mbstate_t(); // utilisation simple : longueur d'un caractère multioctet complet const std::size_t len = std::mbrlen(&str[0], str.size(), &mb); std::cout << "La longueur de " << str << " est " << len << " octets\n"; // utilisation avancée : reprise au milieu d'un caractère multioctet const std::size_t len1 = std::mbrlen(&str[0], 1, &mb); if (len1 == std::size_t(-2)) std::cout << "Le premier octet de " << str << " est un caractère multioctet incomplet (mbrlen retourne -2)\n"; const std::size_t len2 = std::mbrlen(&str[1], str.size() - 1, &mb); std::cout << "Les " << str.size() - 1 << " octets restants de " << str << " contiennent " << len2 << " octets du caractère multioctet\n"; // cas d'erreur : std::cout << "Tenter d'appeler mbrlen() au milieu de " << str << " en état de décalage initial retourne " << (int)mbrlen(&str[1], str.size(), &mb) << '\n'; }
Sortie :
La longueur de 水 est 3 octets. Le premier octet de 水 est un caractère multioctet incomplet (mbrlen retourne -2) Les 2 octets restants de 水 contiennent 2 octets du caractère multioctet Tenter d'appeler mbrlen() au milieu de 水 en état de décalage initial retourne -1
Voir aussi
|
convertit le caractère multioctet suivant en caractère large, en fonction de l'état
(fonction) |
|
|
retourne le nombre d'octets dans le prochain caractère multioctet
(fonction) |
|
|
[virtual]
|
calcule la longueur de la chaîne
ExternT
qui serait consommée par la conversion dans le tampon
InternT
donné
(fonction membre protégée virtuelle de
std::codecvt<InternT,ExternT,StateT>
)
|
|
Documentation C
pour
mbrlen
|
|