Conversion hexa => binaire
péon
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je souhaite réaliser une fonction de conversion d'un nombre hexa en binaire. pour ça j'utilise une chaine de caractere hexadecimal[] et une chaine de caractere binaire[]. voila comment j'ai amorcé ma fonction:
int binaire2(char *hexadecimal){
char *hexa[16]={
"0000",
"0001",
"0010",
"0011",
"0100",
"0101",
"0110",
"0111",
"1000",
"1001",
"1010",
"1011",
"1100",
"1101",
"1110",
"1111",};
char binaire[32];
int i=0;
j'avais l'idee de parcourir ma chaine caractere par caractere et selon le caractere lu , associer le nombre binaire "correspondant" que j'ai prealablement rentré dans un tableau de chaine de caractere *hexa[].
exemple: if( hexadecimal[0]==2) { binaire="0010"}
.....
if (hexadecimal[1]==5) { ajouter à binaire "0101"}
mais cela me semble très complique voir impossible. mais je n'ai pas d'autre idee. Pouvez vous m'aider, car cela fait beaucoup de temps que je suis dessus et je n'arrive pas a avancer?merci d'avance
je souhaite réaliser une fonction de conversion d'un nombre hexa en binaire. pour ça j'utilise une chaine de caractere hexadecimal[] et une chaine de caractere binaire[]. voila comment j'ai amorcé ma fonction:
int binaire2(char *hexadecimal){
char *hexa[16]={
"0000",
"0001",
"0010",
"0011",
"0100",
"0101",
"0110",
"0111",
"1000",
"1001",
"1010",
"1011",
"1100",
"1101",
"1110",
"1111",};
char binaire[32];
int i=0;
j'avais l'idee de parcourir ma chaine caractere par caractere et selon le caractere lu , associer le nombre binaire "correspondant" que j'ai prealablement rentré dans un tableau de chaine de caractere *hexa[].
exemple: if( hexadecimal[0]==2) { binaire="0010"}
.....
if (hexadecimal[1]==5) { ajouter à binaire "0101"}
mais cela me semble très complique voir impossible. mais je n'ai pas d'autre idee. Pouvez vous m'aider, car cela fait beaucoup de temps que je suis dessus et je n'arrive pas a avancer?merci d'avance
A voir également:
- Conversion hexa => binaire
- Binaire - Guide
- Editeur hexa - Télécharger - Édition & Programmation
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Monnaie conversion - Télécharger - Banque & Budget
- 2k€ conversion - Forum Logiciels
4 réponses
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
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.
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