Rechercher : dans
Par :

Conversion hexa => binaire

Dernière réponse le 9 déc 2008 à 22:28:14 péon, le 8 déc 2008 à 23:53:54 
 Signaler ce message aux modérateurs

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

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « conversion hexa => binaire » dans :
Le codage binaire VoirPrésentation du binaire Bit Poids des bits Conversions Octet KiloOctets, MégaOctets Opérations en binaire Addition binaire Multiplication binaire Présentation du binaire Vers la fin des années 30, Claude Shannon démontra qu'à l'aide...
Représentation des nombres entiers et réels VoirReprésentation d'un nombre dans un ordinateur On appelle représentation (ou codification) d'un nombre la façon selon laquelle il est décrit sous forme binaire. La représentation des nombres sur un ordinateur est indispensable pour que celui-ci...
Système hexadécimal VoirSystème hexadécimal Les nombres binaires étant de plus en plus longs, il a fallu introduire une nouvelle base : la base hexadécimale. La base hexadécimale consiste à compter sur une base 16, c'est pourquoi au-delà des 10 premiers chiffres on a...

1

gorekhaa, le 9 déc 2008 à 00:00:38

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



@+








hcXse...°°°*X*°°°...Les destins conduisent celui qui accepte­ et trainent celui qui refuse...

Répondre à gorekhaa

2

fiddy, le 9 déc 2008 à 01:03:51

Salut,
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
Google is your friend

Répondre à fiddy

3

péon, le 9 déc 2008 à 22:08:45

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.

Répondre à péon

4

 fiddy, le 9 déc 2008 à 22:28:14

Je te donne une implémentation de mon code. Tu comprendras peut-être mieux l'algorithme.

#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
Google is your friend

Répondre à fiddy