Conversion Binaire/Hexadécimal en langage C [Fermé]

Signaler
-
 lara -
Bonjour à tous,

je voudrai écrire un programme permettant la conversion d'un chiffre binaire en hexadécimal en langage C.
Et pour cela j'aimerai utilisé une chaine de caractère pour représenter le nombre binaire, ainsi qu'une autre pour le résultat en hexa.

Merci d'avance!!!

7 réponses

Messages postés
166
Date d'inscription
dimanche 2 septembre 2007
Statut
Membre
Dernière intervention
28 octobre 2008
84
Chouette :-)

Poste-nous le resultat quand tu auras fini !

a+
-Qwerti.
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
166
Date d'inscription
dimanche 2 septembre 2007
Statut
Membre
Dernière intervention
28 octobre 2008
84
Une possibilité serait de mettre les caracteres hexadecimaux dans une matrice :

char carhex[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};

puis tu remplaces la ligne

tab[i]= (nombre%2==0) ? '0' : '1' ;

par

tab[i] = carhex[nombre%16];

Il faut aussi remplacer

quotient=nombre/2;

par

quotient=nombre/16;

(ceci dit, je doute que tu aies reellement besoin de la variable quotient).

a+
-Qwerti.
slt!
existe-t-il une commande permettant de transformer un nombre binaire en un hexadécimal en C?
Messages postés
166
Date d'inscription
dimanche 2 septembre 2007
Statut
Membre
Dernière intervention
28 octobre 2008
84
Et bien vas-y, commence, et dis-nous ou tu rencontres des difficultes...

a+
-Qwerti.
pour les nombre reel commrnt en peut faire
aider moi svp
En faite on me demande de me servir de programme et des fonction précedement travailler:
j'avais fais un programme permettant la conversion Binaire/Décimal:

#include<stdio.h>
....

void binaire(int nombre, char tab[100])
{
int quotient,i,j;
char c;
i=0;
while(quotient!=0)
{
quotient=nombre/2;
tab[i]= nombre%2==0) ? '0' : '1' ;
nombre=quotient;
i++;
}

tab[i]= '\0';

for (j=0; j<i/2; j++)
{
c=tab[j];
tab[j]=tab[i-1-j];
tab[i-1-j]=c;
}

}

int main()
{
int nombre;
char chaine[100];
printf("saisir un nombre entier: \n");
scanf("%d",&nombre);
binaire(nombre,chaine);
printf("le nombre en binaire est: \n %s ",chaine);

while(1);

return 0;
}

voilà:

maintenant pour cette conversion Bin/Hexa je suis un peu perdu.
comment faudrai t-il que je mi prend? et est ce que je dois réutilisé la fonction...?
merci beaucoup Qwerti, je pense que cela va beaucoup m'aider!!
a+
Messages postés
7
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
9 mai 2011
2
Bonjour,
je suis novice et je dois faire un programme qui permet de recuperer un hexa en 2 caractere et affiche sa representation en binaire et apres en decimal,
pour l'affichage de decimal pas de souci, par contre pour l'affichage en binaire pb
j'ai trouvé des solutions avec des tab mais on l'a pas vu encore en cours
y'a t il d'autres solutions ??
merci
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
52
Salut,
Comme vous l'avez converti en décimal vous pouvez utiliser les opérateurs binaire;
exemple :
void print_bin(int deci,int nb)
  {
    int i,bin=0;
    for(i=nb-1;i>=0;i--)
      {
        bin=((unsigned)deci>>i)&0x01;
        printf("%d",bin);
      }
    printf("\n");
  }

int main(void)
  {
    print_bin(65,sizeof(char)*8);
    return 0;
  }

Quelques explications : l'opérateur >> fait un décalage de bits vers la droite nfois (x>>2 décale x deux bits vers la droite). Le (unsigned) sert uniquement à ne pas prendre en compte le bit de signe négatif car la variable deci est à la base un int. L'opérateur & est un ET binaire.
La boucle est inversée (décrémente) ce qui permet de récupérer et afficher dans l'ordre de gauche à droite. On décale à fond vers la droite le bit qui nous intéresse et on fait un ET binaire de 1, donc bin aura pour valeur 1 uniquement si le bit présent est 1 sinon bin aura pour valeur 0, ainsi on se déplace un peu comme dans un tableau.
La variable nb prend la taille que l'on veut afficher ça permet de pouvoir afficher des types plus petit qu'un int, dans le main j'ai mis en exemple l'affichage de la taille d'un char. sizeof(type) renvoie la taille en octets d'un type, 1 octet = 8bits, donc taille_en_octet*8.
Si vous voulez récupérer ou afficher les 0 et 1 comme des char suffit de changer les type ou faire un cast, tout en ajoutant à bin le caratère '0' ascii. Exemple bin+='0'; bin aura alors la valeur ascii du 0 et du 1.
Je suis mauvais en explications lisez cet article et faites plusieurs tests avec les opérateurs binaire : https://en.wikipedia.org/wiki/Bitwise_operation
Messages postés
7
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
9 mai 2011
2
j'ai pas converti en decimal mais je sais faire l'affichage d'un hexa en decimal
je suis vraiment novice
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
52
Mettez la chaine de caractère qui représente le décimal en vrai décimal en utilisant *10 hm..
par exemple si vous avec en ascii "135" prenez chaque nombre , attendez..
#include <stdio.h> 
#include <string.h> 

int fois10e(int n) 
  { 
    int i,r=1; for(i=0;i<n;i++) 
        r*=10; 
    return r; 
  } 

int ascii_dec(const char *dec) 
  { 
    int i, d, resultat=0, taille_dec=strlen(dec); 
    d=taille_dec-1; 
    for(i=0;i<taille_dec;i++,d--) 
      { 
        resultat+=(dec[i]-'0')*fois10e(d); 
      } 
    return resultat; 
  } 



int main(void) 
  { 
    int a; 
    a=ascii_dec("135"); 
    printf("%d\n",a); 
    return 0; 
  } 

Voilà, donc on a un décimal sous la forme d'une chaine "135" ce qu'on veut c'est le mettre en décimal pour de vrai. En prenant le nombre de caractère qui compose le "135", c'est à dire 3 on peut faire la conversion en appliquant un multiple de 10 vu que c'est du décimal.
en premier on a le "1" qu'on converti à l'aide de -'0' (passage de l'ascii en décimal, on peut faire -48) puis on le multiplie par 10*2 en utilisant sa position par oublier qu'on commence à 0 donc sa position n'est pas 3 mais 2 (3-1) en utilisant strlen,
ensuite on a le "3" qu'on multiplie par 10*1 en utilisant sa position (2-1)
et en dernier le "5" qu'on multiplie par 10*0 (r=1 dans la fonction fois10e ce qui évite le problème multiplier par 0 = 0...) revient à multiplier par 1 car il est à la position 0 on ne le change pas.
Et on additionne à chaque opération le résultat contiendra au finale la valeur décimal dans un int.
Edit : me suis planté dans mes idées ce n'est pas 10*2 mais *(10^n)
135 = 1*(10^2)+3*(10^1)+5*(10^0)
Messages postés
7
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
9 mai 2011
2
merci bcp