Bonjour,
Comment convertir un caractere vers son code ascii et vice versa ?
Merci d'avance ;)
Version imprimable
Bonjour,
Comment convertir un caractere vers son code ascii et vice versa ?
Merci d'avance ;)
Salut ;)
La valeur ascii se trouve dans ta variable de type char ;) tu peux y accéder via %c, %d, %x, etc.
Par exemple :
Code:
1
2
3
4
5
6 unsigned char lettre; /* Désolé pour le getchar, moi et la saisie de caractère ça fait 2 */ lettre = getchar(); printf("Caractere : %c\nCode ASCII (decimal) : %d\nCode ASCII (hexa) : %x", lettre, lettre, lettre);
Ce n'est pas du tout difficile.
Un petit exemple qui donne la lettre en fonction du code ascii :
Et inversement :Code:
1
2
3 char caractere=70; printf("Au code ascii %d correspond la lettre %c\n",caractere,caractere);
Code:
1
2
3 char caractere='w'; printf("Au caractere %c correspond le code ASCII %d\n",caractere,caractere);
Je veux que le code ascii soit enregistrer vers un int .Citation:
Envoyé par Freed0
Exp:
int nbr = codeAscii("A");
char chr = caract(65);
En c, il n'y a pas de difference entre les characteres et les entiers.
Code:
1
2 int valeurAscii = 'A';
en fait, si tu veux faire des calculs avec le code ascii, tu n'as a la limite meme pas besoin de le convertir ! ces expressions ont du sens :
Code:
1
2
3 char c='R'; c=c+2-'z';
Je veux affecter le code ascii d'un caracter vers une variable de type entier et pas afficher son code ascii.Citation:
Envoyé par atnnn
exp:
int nbr = codeAscii("A");
char chr = caract(65);
printf("Le code ascii de %c est %d", chr, nbr);
et non pas
printf("Le code ascii de %c est %d", chr, chr);
Bah oui mais justement c'est ça le truc en C. Le %c %d ne joue que sur la représentation à l'écran. Pas besoin d'une fonction spéciale pour manipuler les codes ASCII des caractères. Pour info, un char est codé sur 8 bits et un int sur 32 bits sur x86 je crois (processeur 32 bits). Mettre la valeur d'un char dans un entier ça ne sert strictement à rien puisque les deux sont manipulables de la même façon. La table ASCII tient juste sur 8 bits par contre.
Quand tu dis je veux ça mais pas ça ça, en fait ce sont deux constructions identiques
Le charactere A est represente par 'A' et non "A" en C.
Voici deux definitions qui font ce que tu veut:
Pourquoi es-ce que ca marche? Par ce que, en C, 'A' == 65:Code:
1
2
3
4
5
6
7
8 #define codeAscii(c) c #define caract(c) c int nbr = codeAscii('A'); char chr = caract(65); printf("Le code ascii de %c est %d", chr, nbr);
Il n'y a aucune difference entre un charactere et sa representation ascii, qui est codee sur 7 bits.Code:
1
2
3
4
5 char chr = 'A'; if(c==65){ puts("Hello, world!"); }
Code:
1
2 printf("Le code ascii de %c est %d", 65, 'A');
Et ceci est valable pour tous les caractères ASCII (0 à 127) sur une plate-forme en ASCII (évidemment, sur une plate-forme en EBCDIC, ça ne marchera pas).
Ici, des hypothèses sont faites sur les valeurs :
Sans oublier toutes les apparitions du nombre 65 dans le thread.Citation:
Envoyé par jobherzt
Et je voulais surtout mettre l'accent sur le fait que ça ne marche pas forcément en ASCII étendu, principalement à cause des soucis de signe.
et il y a les fonctions toascii() .... pour de l'ascii 7bits...
Code:
1
2
3
4 #include <ctype.h> int toascii(int c);
:yaisse2:
Rien de tel dans la bibliothèque standard du langage C. Je connaissais l'extension isascii() de Borland...Citation:
Envoyé par souviron34
Quand à l' "ASCII 7-bit", c'est l'ASCII, tout simplement, je n'en connais pas d'autres...
référence toascii :Citation:
Envoyé par Emmanuel Delahaye
http://www.opengroup.org/onlinepubs/...s/toascii.html
référence ascii 8 bits (ou ascii étendu) (nom de norme UTF8, nom usuel ascii 8 bits) :
http://fr.wikipedia.org/wiki/UTF-8
entre autres....
Mais je suis d'accord que c'est un abus de langage... ;)
Citation:
Envoyé par souviron34
Sachant que SVID est System V Interface Definition, toascii() n'est donc pas standard, mais SUS.Citation:
Derived from Issue 1 of the SVID.
http://en.wikipedia.org/wiki/List_of_C_functions
http://en.wikipedia.org/wiki/Ctype.h
Perdu, UTF-8 n'est pas l'ASCII étendu: c'est de l'unicode, et c'est un ASCII étendu, tout comme ISO 8859-1, Windows CP1252, etc.Citation:
référence ascii 8 bits (ou ascii étendu) (nom de norme UTF8, nom usuel ascii 8 bits) :
Et ? OK, c'est POSIX.1, mais ce n'est pas standard C. Il faut être précis quand on cite une fonction, sinon, on crée la confusion et ça génère des question inutiles...Citation:
Envoyé par souviron34
La doc de POSIX.1 est on ne peut plus claire :
http://www.opengroup.org/onlinepubs/...s/ctype.h.html
Ce qui est noté XSI est une extension du langage CCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 DESCRIPTION [CX] [Option Start] Some of the functionality described on this reference page extends the ISO C standard. Applications shall define the appropriate feature test macro (see the System Interfaces volume of IEEE Std 1003.1-2001, Section 2.2, The Compilation Environment) to enable the visibility of these symbols in this header. [Option End] The following shall be declared as functions and may also be defined as macros. Function prototypes shall be provided. int isalnum(int); int isalpha(int); [XSI][Option Start] int isascii(int); [Option End] int isblank(int); int iscntrl(int); int isdigit(int); int isgraph(int); int islower(int); int isprint(int); int ispunct(int); int isspace(int); int isupper(int); int isxdigit(int); [XSI][Option Start] int toascii(int); [Option End] int tolower(int); int toupper(int); The following are defined as macros: [XSI][Option Start] int _toupper(int); int _tolower(int); [Option End]
Code:
1
2
3
4
5
6
7 XSI Extension [Option End] The functionality described is an XSI extension. Functionality marked XSI is also an extension to the ISO C standard. Application writers may confidently make use of an extension on all systems supporting the X/Open System Interfaces Extension. If an entire SYNOPSIS section is shaded and marked XSI, all the functionality described in that reference page is an extension. See XSI Conformance . See help on Margin Code Notation.