Conversion Hexa vers ASCII [C] - C - Programmation
Marsh Posté le 11-01-2009 à 22:51:44
y a pas de correspondance. Un char c'est un entier. L'affichage n'est qu'une question de formatage, du printf %d ou bien %c
Marsh Posté le 11-01-2009 à 22:58:47
Est ce que tu peux développer un peu je comprends pas tout.
En faite en faisant un printf on peut lui dire d'afficher le nombre hexa directement en ascii juste en mettant %qqch, c'est bien ça ?
Marsh Posté le 12-01-2009 à 17:15:24
Un nombre est un nombre, et pour le C il n'y pas de "nombre hexa". Il y a un nombre, que tu peux afficher en décimal, en octal, en hexadécimal...
Marsh Posté le 12-01-2009 à 19:39:26
Bonsoir,
Je comprends ce que vous voulez me dire mais je ne sais pas très bien comment le réaliser.
Voici le programme que j'ai fait :
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char dep[20];
printf("Quel sont les valeurs hexadécimales du block 1 ? " );
scanf("%x", dep);
printf("Le conteneur est en partance de %x", dep);
return 0
}
Quand j'exécute le programme, j'ai toujours la lettre P qui s'affiche =(...
Je ne vois pas ou j'ai fait une erreur ...
Marsh Posté le 12-01-2009 à 19:40:08
correction dans le dernier printf j'ai mis %c au lieu de %x.
Merci d'avance
Marsh Posté le 12-01-2009 à 21:05:07
nan mais là te manques les bases du scanf/printf
lire une chaine: fgets
ensuite tu converti en int avec strtol
et après tu printf
Marsh Posté le 13-01-2009 à 16:35:50
fgets, j'ai compris comment m'en servir, mais par contre je ne comprends pas pour le strtol ...
Voici ce que j'ai pour le strtol :
long strtol( const char *start, char **end, int base );
Ce que je pense mettre en const c'est 8 car j'ai 8 lettres/nombres en hexa, après je pense mettre NULL puis pour int base je mettrais 16.
Est ce ça ?
Marsh Posté le 13-01-2009 à 17:14:42
Voici ce que j'ai fait mais qui ne fonctionne pas :
<code>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
char depart[200];
printf("Quel sont les valeurs hexadécimales du block 1 ? " );
fgets(depart, sizeof depart, stdin);
strtol(depart, NULL, 16);
printf("Le conteneur est en partance de %c", depart);
}
</code>
Ou ai je fait une erreur ?
Marsh Posté le 13-01-2009 à 17:31:54
Ca veut dire quoi "ça ne fonctionne pas"? C'est trop vague.
Et as-tu bien compris comment fonctionne strtol() ?
De la doc : http://www.cplusplus.com/reference [...] trtol.html
Marsh Posté le 13-01-2009 à 17:34:58
Non je pense ne pas bien comprendre comment utiliser le strtol même avec la documentation est ce que vous pourriez m'expliquer ?
Pour moi quand je dis ça ne fonctionne pas, c'est que je n'arrive pas à obtenir la conversion hexadécimal vers ASCII :-( .
Marsh Posté le 13-01-2009 à 17:42:25
Vais peut-être dire des conneries, mais ça me fera l'occasion de me faire corriger
Quand tu saisie des caractères hexadécimaux sur l'entrée standard, ça ne correspond à rien d'autre qu'une suite char qui eux-même correspondent à différents nombres qui n'ont à priori pas grand chose à voir avec le nombre héxadécimal que l'on voudrait obtenir.
Il est donc essentiel de convertir cette chaîne de caractère en valeur numérique. C'est ce que permet strtol !
Exemple : Si tu saisie FF, au mieux tu aura deux fois le code de F alors que tu voudrais 255.
Marsh Posté le 13-01-2009 à 17:48:21
Ok, si je comprends bien, habituellement si je saisie un nombre hexa, il n'a aucune correspondance. Tandis que strtol permet de faire une correspondance. C'est bien ça ?
Marsh Posté le 13-01-2009 à 18:29:59
Un exemple de conversion :
Code :
|
Marsh Posté le 13-01-2009 à 18:31:13
Je pense avoir mal compris quelque chose, un nombre en base 16 n'est pas la même chose qu'un nombre hexadécimal ?
Marsh Posté le 13-01-2009 à 18:34:53
Je ne comprends pas bien ta ligne 7 est ce que tu veux ben me l'expliquer s'il te plait ?
Le prog convertit de hexa à déci, je vais essayer de faire quelque chose pour que ça convertisse en caractère.
Marsh Posté le 13-01-2009 à 18:39:36
Faudrait peut être allez voir les bases du C tu crois pas?
Enfin bon...
T'occupe pas du second paramètre de strtol.
Concentre toi sur le premier et le dernier.
Il lui faut donc la chaîne saisie par l'utilisateur, ici je me suis limité à une chaîne de 2 caractères (soit 3 avec le caractère de fin de chaîne) ce qui correspond à un octet en notation hexadécimal, soit un char.
Il lui faut également la base pour savoir quelle conversion effectuer. Ici 16, ce qui correspond à la notation hexadécimale.
A partir de ces deux paramètre, elle renvoie la valeur traduite sous forme numérique, contenue dans une variable du bon type. Ici de type long. Que l'on récupère dans res.
Pour ensuite obtenir le caractère c'est simple : printf("%c",res);
Marsh Posté le 13-01-2009 à 18:42:04
Merci beaucoup de tes explications, tu m'as beaucoup aidé.
Merci encore
Marsh Posté le 13-01-2009 à 18:44:50
Commence par consulter une table ASCII (google est ton ami).
Code :
|
ça donne A,B,C
Edit : Ah bah si tu change tes messages....
Marsh Posté le 13-01-2009 à 18:50:18
D'accord, j'essaye de faire quelque chose qui convertit plusieurs caractères et je t'en fait part.
Oui, excuse moi d'avoir edité mes messages ...
Marsh Posté le 13-01-2009 à 19:11:36
Voici ce que j'ai fait et qui fonctionne, enfin ...
Code :
|
Un grand merci à toi dwogsi, sans toi je n'y serait jamais arrivé.
Merci aussi aux autres.
Marsh Posté le 13-01-2009 à 22:10:50
J'ai de nouveau un problème. Voici mon programme :
Code :
|
Or quand j'exécute mon programme en ligne de commande voici ce que j'obtiens :
Code :
|
Le k de Honk se retrouve dans ce que contient le conteneur et décale tout.
J'ai loupé un espace ou une mise à la ligne ?
Marsh Posté le 13-01-2009 à 22:32:29
fgets lis une ligne. Pour ce que tu veux faire, tu dois:
- lire une ligne avec fgets (genre au moins 80c)
- former des groupes de 2c et les passer à strtol
Marsh Posté le 11-01-2009 à 19:13:24
Bonsoir,
Je suis étudiant et dans la réalisation d'un projet, j'aimerai faire un programme qui convertit des valeurs hexadécimal en son équivalent en ASCII, j'aimerai en premier savoir si cela est possible en C (le seule langage que je connais un peu).
Si oui, voici comment je pense m'y prendre :
/
- Inclure les bibliothèques nécessaires
- Affichage [Entrer les valeurs en hexa]
- Lecture des valeurs
- Effectuer la correspondance
- Affichage de la correspondance
/
Mon problème est surtout pour faire la correspondance et réafficher ensuite cela.
Comment dois je m'y prendre ?
Merci d'avance