Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 76 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

convertion Hexa en Déci en C

 
n°15064
duranton
Profil : Jeune recrue
Posté le 26-10-2005 à 14:30:41  profilanswer
 

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 ?  
 

Code :
  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. if (argc>1)
  12. {
  13. tablettre[0]='a';
  14. tablettre[1]='b';
  15. tablettre[2]='c';
  16. tablettre[3]='d';
  17. tablettre[4]='e';
  18. tablettre[5]='f';
  19. for(cpt=0;cpt<6;cpt++)
  20.   {
  21.   tabchiffre[cpt]=cpt+1;
  22.    }
  23. for(cpt=1;cpt<argc;cpt++)
  24. {
  25.    for(i=0;i<6;i++)
  26.    {
  27.      if(argv[cpt]==tablettre[i])
  28.      {
  29.      argv[cpt]=tabchiffre[i];
  30.      printf("oui" );
  31.      }
  32.      else
  33.      {
  34.      printf("non" );
  35.       }
  36.    }
  37. }
  38. for(cpt=1;cpt<argc;cpt++)
  39. {
  40. somme=somme+(argv[cpt])*pow(16,argc-cpt-1);
  41. }
  42. printf("La somme des entiers indiqués en argument est : %dn",somme);
  43. }
  44. else
  45. {
  46. printf("Vous devez rentrer un argument pour que le programme fonctionnen" );
  47. }
  48.   return 0;
  49. }


 
J'ai l'impression que l'erreur vient de  
 

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


 
Merci  
 
 

n°15065
01iv'
Profil : Membre
Posté le 26-10-2005 à 15:23:25  profilanswer
 

Bonjour,
 
tu n'as pas l'impression de te compliquer un poil la vie ???

result = atoi(argv[1]);
printf("0x%x donne %d en base10\n", result, result);


et je pense que ça doit être bon ;)
 
Oliv'

n°15067
duranton
Profil : Jeune recrue
Posté le 26-10-2005 à 17:21:15  profilanswer
 

Merci
 
je veu bien te croir que je me complique la vie mais tu peu m'expliquer pourquoi
et à quoi sert le atoi.
 
 
Que dois je remplacer dans mon code ?
 
Merci
 

n°15068
Tastito
So lost in love
Profil : Dinosaure
Posté le 26-10-2005 à 19:05:38  profilanswer
 

Ben sur la ligne de commande tu recois une chaine de caractère ( c'est un char*) donc la fonction atoi, permet de passer de l'acsi à l'integer


---------------
"Oh, that girl, you know she really, blows my, head apart,  
And the sky and the stars, all, synkronized...  
Eh no.... No no no, now me and her,  
We are in love... "  
n°15069
duranton
Profil : Jeune recrue
Posté le 26-10-2005 à 20:26:43  profilanswer
 

Non j'ai essayer et pour le hexadécimal la fonction atoi ne converti pas l'hexa en décimal, il renvoi une valeur nul lorsqu'il y a un caractère dans l'argument.
 
Comment convertir ?

n°15070
01iv'
Profil : Membre
Posté le 26-10-2005 à 21:04:15  profilanswer
 

dsl :p
en fait ce que je t'ai dit marche parfaitement dans le sens: base10 -> base16 mais pas dans l'autre car atoi converti la chaine de caractère en un entier en base10... en fait il suffit de ruser avec la fonction "strtol()" qui fait la même chose mais permet de spécifier la base ;)
voilà un code qui marche:

#include <stdio.h>
#include <stdlib.h>
 
int
main (int argc, char** argv)
{
        long int result;
 
        result = strtol( argv[1], (char**) NULL, 16);
        printf("0x%x donne %d en base10\n", result, result);
}


 
Note: programme très light car aucun contrôle d'erreur ou de validité des arguments


Message édité par bbober le 26-10-2005 à 21:06:41

Aller à :
Ajouter une réponse