Récupérer le code ASCII des majuscules accentuées

cs_nico_44 Messages postés 13 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 6 mai 2013 - 6 mai 2013 à 15:11
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 7 mai 2013 à 21:57
Bonjour à toutes et à tous,

Je cherche à récupérer le code ASCII des majuscules accentuées (É, È, À...).
En effet, la méthode "classique" (int i = chr(MyChar)) ne fonctionne pas. La valeur retournée pour "É" devrait être 144 mais la fonction chr() me retourne -55!
Quelqu'un aurait-il une solution à me proposer?

Merci d'avance pour vos réponses.

Nicolas
A voir également:

4 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
6 mai 2013 à 15:54
Bonjour.

Qu'est-ce que "chr()" ? Ce n'est officiellement présent ni en C ni en C++. Est-ce une méthode à toi ?
Pour récupére le code ascii d'un caractère en C ou C++, il n'y a rien à faire. Un caractère et un code ascii c'est la même chose ! Seule la réprésentation change, pas la valeur.

Ex:
int i = 97;
printf("%c %i\n", i, i); // Affichera "a 97"

char c = 'a';
printf("%c %i\n", c, c); // Affichera "a 97"

if ('a' == 97)
{
  // Est vrai.
}



Enfin, il est impossible que tu récupères le code ascii d'une majuscule accentuée, pour la simple et bonne raison qu'elle n'est pas présente dans la table ascii étendue (voir: http://www.theasciicode.com.ar/)

Dès le moment où tu as besoin de caractères plus complets, il te faut utiliser une table unicode ou une table UTF-8.
Voir le projet: http://utfcpp.sourceforge.net/
Qui te sera peut être utile.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cs_nico_44 Messages postés 13 Date d'inscription vendredi 21 juillet 2006 Statut Membre Dernière intervention 6 mai 2013
6 mai 2013 à 16:08
Je suis désolé, j'ai extrêmement mal formulé ma question, et bien sûr, la fonction chr() est une pure erreur de formulation.
En fait, je récupère une chaine de caractère, et je récupère ensuite le code ASCII de chacun des caractères de cette chaine.

Merci pour les liens que tu m'as donné. Je vais voir si j'y trouve mon bonheur, sinon je ferai ma propre table de conversion.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
6 mai 2013 à 16:15
je récupère ensuite le code ASCII de chacun des caractères de cette chaine.

Là, où c'est embêtant, c'est que dans une table Unicode ou UTF-8, un caractère n'est pas forcément représenté par un seul octet. Il faut parfois récupérer l'association de deux "char" (voir plus) pour avoir un seul caractère. En plus de cela, la taille d'un caractère peut varier (entre 1 et 3 octets en UTF-8, contre toujours 1 octet en ascii).
Les problèmes d'encoding sont vraiment une plaie, et je te souhaite bonne chance :)

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
7 mai 2013 à 21:57
Salut,

sous Windows, on s'embète pas vraiment avec ça, l'API OemToChar permet de retrouver la valeur pour déclarer un char qui va bien.
Exemple:

// Recherche valeur de É avec l'API CharToOem
char src[] = "É";
char dst[2];
CharToOemA(src, dst);

printf("d=%d \t c=%c \t s=%s \r\n", dst[0], dst[0], dst); //trouve -112 

// Du coup...
char ch = (char)-112;   // <------------------- ICI
printf("c=%c\r\n", ch); // -112 ok, affiche bien É


bye...
0
Rejoignez-nous