Conversion hexa => binaire
Fermé
péon
-
8 déc. 2008 à 23:53
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 déc. 2008 à 22:28
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 9 déc. 2008 à 22:28
A voir également:
- Conversion hexa => binaire
- Codage binaire - Guide
- Printf hexa - Forum Programmation
- Editeur hexa - Télécharger - Édition & Programmation
- Alphabet binaire ✓ - Forum Programmation
- Conversion note sur 20 ✓ - Forum Bureautique
4 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 817
9 déc. 2008 à 01:03
9 déc. 2008 à 01:03
Salut,
Effectivement tu te compliques la vie ;)
Tout débord, une petite remarque sur ton code :
Mettre *hexa[] suffit. Pas besoin de calculer ;)
Sinon côté algo, il ne faut pas sous-estimer la machine en matière de calcul et de boucle.
Pour effectuer ta conversion, je te propose l'algo suivant :
Si t'as des questions, n'hésite pas.
Cdlt
Effectivement tu te compliques la vie ;)
Tout débord, une petite remarque sur ton code :
char *hexa[16]={...}
Mettre *hexa[] suffit. Pas besoin de calculer ;)
Sinon côté algo, il ne faut pas sous-estimer la machine en matière de calcul et de boucle.
Pour effectuer ta conversion, je te propose l'algo suivant :
L'utilisateur entre son nombre en hexa dans une chaine. La machine mets dans un integer la variable de l'utilisateur (conversion possible avec sscanf et de %x). Ensuite simple problème de boucle pour convertir en binaire. Si tu comptes avoir des grands nombres, je te conseille de passer par une chaîne de caractère que tu alloueras dynamiquement en fonction du nombre (la plus grande puissance de 2). Utilise plutôt les boucles que le log de la bibliothèque math.h. Et ensuite, une petite boucle toute bête : chaine = la chaine allouée dynamiquement, Variable = le nombre converti et i vaut l'indice maximale de la chaine (taille - 1). TantQue Variable >0 Faire chaine[i]<-Variable % 2 Variable=Variable/2 i=i-1; FinFaire
Si t'as des questions, n'hésite pas.
Cdlt
gorekhaa
Messages postés
66
Date d'inscription
mercredi 9 juillet 2008
Statut
Membre
Dernière intervention
5 septembre 2011
3
9 déc. 2008 à 00:00
9 déc. 2008 à 00:00
Salut,
du carton, des ciseaux, un stylo et un cerveau... Tu te fabriques une règle (tu pourras meme faire la conversion en octal si tu veux...)
Réfléchis, tu trouveras... Un petit indice: ça coulisse...
Pour les plans de la règle, un jour peut-etre...
Aller, bon découpage
@+
du carton, des ciseaux, un stylo et un cerveau... Tu te fabriques une règle (tu pourras meme faire la conversion en octal si tu veux...)
Réfléchis, tu trouveras... Un petit indice: ça coulisse...
Pour les plans de la règle, un jour peut-etre...
Aller, bon découpage
@+
Merci d'avoir pris le temps de me répondre mais je ne comprends pas très bien l'algo. J'ai l'impression que vous faites une conversion de decimal à binaire. Etant donné mon faible niveau , je sais que l'erreur vient probablement de moi et pas de votre algo.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 817
9 déc. 2008 à 22:28
9 déc. 2008 à 22:28
Je te donne une implémentation de mon code. Tu comprendras peut-être mieux l'algorithme.
Cdlt
#include <stdio.h>
#include <stdlib.h>
char* conv(int nbHexa){
char *bin;
int i;
size_t taille;
if(nbHexa<0) return NULL;
i=1;
taille=0;
while(i<=nbHexa){
i<<=1;
taille++;
}
if(taille==0) taille=1;
if((bin=malloc(taille))==NULL) return NULL;
if(nbHexa==0) bin[0]='0';
while(nbHexa>0){
bin[--taille]=nbHexa%2+'0';
nbHexa>>=1;
}
return bin;
}
int main(void){
int nbHexa;
char *bin;
puts("Nombre :");
scanf("%x",&nbHexa);
printf("Conversion en binaire :%s\n",bin=conv(nbHexa));
free(bin);bin=NULL;
return 0;
}
Cdlt