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 ?
Merci
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 ?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char** argv)
{
int cpt;
int i;
int somme=0;
char tablettre[6];
int tabchiffre[6];
int tabvariable[6];
if (argc>1)
{
tablettre[0]='a';
tablettre[1]='b';
tablettre[2]='c';
tablettre[3]='d';
tablettre[4]='e';
tablettre[5]='f';
for(cpt=0;cpt<6;cpt++)
{
tabchiffre[cpt]=cpt+1;
}
for(cpt=1;cpt<argc;cpt++)
{
for(i=0;i<6;i++)
{
if(argv[cpt]==tablettre[i])
{
argv[cpt]=tabchiffre[i];
printf("oui");
}
else
{
printf("non");
}
}
}
for(cpt=1;cpt<argc;cpt++)
{
somme=somme+(argv[cpt])*pow(16,argc-cpt-1);
}
printf("La somme des entiers indiqués en argument est : %d\n",somme);
}
else
{
printf("Vous devez rentrer un argument pour que le programme fonctionne\n");
}
return 0;
}
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
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
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 :
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. ++
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. ++
int main(int argc, char* argv[])
{
int carCour, res=0;
int i=0;
char *AddCarCour;
printf("l'argument entrée en hexa est : [%s]\n",argv[1]);
AddCarCour=argv[1];
while((*AddCarCour)!=0)
{
carCour=(int)(*AddCarCour);
if (carCour<65) carCour=carCour-48; /*0 (soit car 0) prend pour valeur 0 */
if (carCour>=65&carCour<97) carCour=carCour-55; /*A (soit car 65) prend pour valeur 10 */
if (carCour>=97) carCour=carCour-87; /*a (soit car 97) prend pour valeur 10 */
res=res*0xF+carCour;
AddCarCour=AddCarCour+sizeof(char);
}
printf("la somme de l'argument en base 10 est : [%x]\n",res);
return 0;
}
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:
Autrement il faut d'abord tranformer une chaine de caractère codé hexa en nombre:
// buff_temp est une représentation string du nombre en hexa
sscanf(buff_temp,"%x",&value);
//value contien la valeur => buff contiendra sa représentation en décimal
sprintf(buff, "%d", value);
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :