Se connecter avec
S'enregistrer | Connectez-vous

Convertion Hexa to Décimale

Dernière réponse : dans Programmation

Bonjour,

Je veus créer un prog. en C permettant d'afficher un base 10 , un nombre exprimé en héxadécimal passé en argument de la ligne de commande. Par exemple la commande ./ hexa2int 1a affichera : 26

Voici ce que j' ai fais , mais ceci ne fonctionne pas.

Pourquoi ?

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. int main(int argc, char** argv)
  5. {
  6. int cpt;
  7. int i;
  8. int somme=0;
  9. char tablettre[6];
  10. int tabchiffre[6];
  11. int tabvariable[6];
  12. if (argc>1)
  13. {
  14. tablettre[0]='a';
  15. tablettre[1]='b';
  16. tablettre[2]='c';
  17. tablettre[3]='d';
  18. tablettre[4]='e';
  19. tablettre[5]='f';
  20.  
  21. for(cpt=0;cpt<6;cpt++)
  22. {
  23. tabchiffre[cpt]=cpt+1;
  24. }
  25.  
  26. for(cpt=1;cpt<argc;cpt++)
  27. {
  28. for(i=0;i<6;i++)
  29. {
  30.  
  31. if(argv[cpt]==tablettre[i])
  32. {
  33. argv[cpt]=tabchiffre[i];
  34. printf("oui");
  35. }
  36. else
  37. {
  38. printf("non");
  39. }
  40. }
  41.  
  42. }
  43.  
  44.  
  45. for(cpt=1;cpt<argc;cpt++)
  46. {
  47. somme=somme+(argv[cpt])*pow(16,argc-cpt-1);
  48. }
  49. printf("La somme des entiers indiqués en argument est : %d\n",somme);
  50. }
  51. else
  52. {
  53. printf("Vous devez rentrer un argument pour que le programme fonctionne\n");
  54. }
  55. return 0;
  56. }



Merci

Autres pages sur : convertion hexa decimale

Lassé par la pub ? Créez un compte

En effet ca doit être plus simple que je pensai , et ton code m'aide ton mon problème malgrès que mon prog. ne fonctionne toujours pas.

int main(int argc, char** argv)
{

printf("l'argument entrée en hexa est : [%s]\n",argv[1]);

printf("la somme de l'argument en base 10 est : [%d]\n", argv[1]);

return 0;
}

Comment transformé l'hexa en décimal sans utiliser scanf

la trotte a dit :
atoi() est obsolète. de plus, pour de l'hexa, ça va pas le faire...

strtoul()...


ah ? je ne savais pas que atoi() était obsolète, merci !
en plus c'est vrai, cela ne fonctionne pas avec de l'hexa, ca m'apprendra à vouloir lire du code avant le 4eme café de la journée :pt1cable: 

clem2891 a dit :
Ok je vais essayer de me servir de ta fonction, mais j' ai l'impression que le problème vient de la ligne :

  1. if(argv[cpt]=tablettre[i])


Je compare la valeur de 2 caractères inscrit dans deux cases d'un tableau.


non, argv est de type 'char **', c'est un tableau de chaînes de caractères.

donc, argv[cpt] est une chaîne de caractères (type char *), alors que tablettre est un caractère (type char)
argv[cpt] = "1a" d'après ton exemple
argv[cpt][0] = '1'
argv[cpt][1] = 'a'

Désolé pour la présentation de mon message... J'ai répondu a la va-vite, j'avais pas trop le temps et vu que c'est pour donner un coup de main a quelqu'un dont je connais...
Yvan, pour ta ligne "printf("l'argument entrée en hexa est : [%s]\n",argv[1]); "
Fais gaffe, comme la dit damocles31 c'est un tableau de char.

Tien j'vien de te faire un prog, vite fait... tu jette un coup d'oeuil... il ne marche pas tout a fait, il fo regler le "sizeof" je pense...
Je te laisse regarder...
Pour mes test j'ai laisser le resultat s'afficher en hexa.
Aller bonne soiree. ++

  1. int main(int argc, char* argv[])
  2. {
  3. int carCour, res=0;
  4. int i=0;
  5. char *AddCarCour;
  6.  
  7.  
  8. printf("l'argument entrée en hexa est : [%s]\n",argv[1]);
  9.  
  10. AddCarCour=argv[1];
  11. while((*AddCarCour)!=0)
  12. {
  13. carCour=(int)(*AddCarCour);
  14. if (carCour<65) carCour=carCour-48; /*0 (soit car 0) prend pour valeur 0 */
  15. if (carCour>=65&carCour<97) carCour=carCour-55; /*A (soit car 65) prend pour valeur 10 */
  16. if (carCour>=97) carCour=carCour-87; /*a (soit car 97) prend pour valeur 10 */
  17.  
  18. res=res*0xF+carCour;
  19.  
  20. AddCarCour=AddCarCour+sizeof(char);
  21. }
  22.  
  23. printf("la somme de l'argument en base 10 est : [%x]\n",res);
  24.  
  25. return 0;
  26. }

oui bon value est un int dans mon cas , et je ressort une chaine de caractère de ce nombre codé en décimal

Autrement il faut d'abord tranformer une chaine de caractère codé hexa en nombre:

  1. // buff_temp est une représentation string du nombre en hexa
  2. sscanf(buff_temp,"%x",&value);
  3. //value contien la valeur => buff contiendra sa représentation en décimal
  4. sprintf(buff, "%d", value);
Lassé par la pub ? Créez un compte