Bonjour,
Qeulqu'un à une idée sur une fonctions qui calculent le nombre d'octets d'un caractères
Merci d'avance.
Remarque : je parle d'un caractère et non pas d'une chaîne de caractère
Version imprimable
Bonjour,
Qeulqu'un à une idée sur une fonctions qui calculent le nombre d'octets d'un caractères
Merci d'avance.
Remarque : je parle d'un caractère et non pas d'une chaîne de caractère
Tu parles des char, wchar_t, etc ?
je parle de char en fait j'utilise comme encodage UTF8
OS: ubutuen fait j'ai besoin de savoir la taille d'un séparateur, j'utilise comme
séparateut ¤ , ; .......
par exemple le caractère ¤ est code sur 2 bytes
ya t'il une fonction qui me permet d'avoir la taille de ¤ .
???
sizeof()
A oublier sizeof car sizeof(¤) = 4, alors que ¤ code sur 2 bytes pour l'UTF8
tu peut teste sizeof("abc¤") = 6
par contre sizeof('¤') = 4????????????
c'est normal car sizeof('a') retourne la taille que la constante 'a' et une constante est codée sur 4 octets d'où ton sizeof = 4
Salut,
Tu peux aller voir du côté de glib:
mais c'est du C.Code:
1
2
3
4
5 #include <glib.h> /* ... */ char const* String="¤"; char* Next=g_utf8_offset_to_pointer(String, 1); int Bytes=Next-String;
En C++, tu peux aller voir du côté de glibmm:
Tu peux aussi aller voir du côté de iconv, ou si tu veux réinventer la roue, du côté de la définition de l'Utf8 pour te faire ta propre fonction.Code:
1
2
3
4
5 #include <glibmm/ustring.h> // ... Glib::ustring String="¤"; int Characters=String.length(); int Bytes=String.bytes();
Par contre, je pense que tu dois manipuler les caractêres UTF-8 en tant que chaînes de caractères ("…"), pas en tant que constante caractères('…') pour que les caractères multi-octets soient bien gérés.
Norme du C++, §6.4.4.4, paragraphe 10:
"An integer character constant has type int. The value of an integer character constant containing a single character that maps to a single-byte execution character is the numerical value of the representation of the mapped character interpreted as an integer."
Ton litéral chaîne est converti en int, pas en char, ou wchar_t, ou autre...
Reste à savoir pourquoi Nouri veut calculer la taille:
1) stockage en tant que char en C++=> réponse d'oodini
2) buffer pour stocker la représentation UTF-8 ==> glibmm apparament. Cependant, on peut se demander si dans ce cas il ne vaut pas mieux aller plus loin et utiliser la lib pour toutes les manipulations==>plus besoin de calculer la taille car la lib va gérer...
3):koi:
A lire la norme de C++11, je ne suis pas sûr que ce que j'ai indiqué plus haut soit encore rai en C++11.
En C++11, on peut d'ailleurs spécifier un encodage pour un litéral :
Le type sera const char *.Code:auto pouet = u8"pouet";
Pour l'instant implémenté sur gcc, mais pas sur Visual C++.