Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1538 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Conversion Decimal to binary et inversement.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Conversion Decimal to binary et inversement.

n°1858039
leoz2004
Posté le 05-03-2009 à 15:55:11  profilanswer
 

Bonjour,
je bosse actuellement sur un projet et je dois convertir la valeur d'un char (man ascii) en  binaire.
exemple : "cool" en ascii sa donne (99 111 111 108) il me reste plus qu'a transformer 99 en binaire.
J'ai donc recoder une fonction appeler get_number_base, cependant il me renvoi un peu n'importe quoi.
 
J'ai aussi parcourus le web et plus particulierement le forum, je suis tomber sur ce post :
http://forum.hardware.fr/hfr/Progr [...] 2330_1.htm
 
ma fonction getnbr me renvoi constamment -15... je poste le code de cette fonction si quelqu'un veut bien jeter un cou d'oeil ^^
(en aucun cas je demande qu'on me fasse mon boulot, juste qu'on me debloque).
 

Code :
  1. int     get_pos_in_base(char c, char *base)                                                                             
  2. {                                                                                                 
  3.   int   position;                                                                                                       
  4.                                                                                                                  
  5.   position = 0;                                                                                                         
  6.   while (*(base + position) && *(base + position) != c)                                                                 
  7.     position++;                                                                                                         
  8.   if (*(base + position))                                                                                               
  9.     return (position);                                                                                                   
  10.   else                                                                                                                   
  11.     return (-1);                                                                                                         
  12. }                                                                                                                       
  13.                                                                                                                          
  14. int     my_getnbr_base(char *str, char *base)                                                                           
  15. {                                                                                                                       
  16.   int   res;                                                                                                             
  17.   int   base_len;                                                                                                       
  18.                                                                                                                          
  19.   if (*str == '-')                                                                                                       
  20.     return (-my_getnbr_base(str + 1, base));                                                                             
  21.   if (*str == '+')                                                                                                       
  22.     return (my_getnbr_base(str + 1, base));                                                                             
  23.   base_len = my_strlen(base);                                                                                           
  24.   res = 0;                                                                                                               
  25.   while (*str)                                                                                                           
  26.     {                                                                                                                   
  27.       res *= base_len;                                                                                                   
  28.       res += get_pos_in_base(*str, base);                                                                               
  29.       str++;                                                                                                             
  30.     }                                                                                                                   
  31.   return (res);                                                                                                         
  32. }


 
 
Merci les codeurs fou ^^
Leoz


---------------
Worldcraze 10loop
mood
Publicité
Posté le 05-03-2009 à 15:55:11  profilanswer
 

n°1858093
tpierron
Posté le 05-03-2009 à 16:40:46  profilanswer
 


Oué, déjà définit précisément ce que tu entends par "convertir en binaire". Parce que si tu regardes un entier dans la mémoire d'un ordinateur, bah, c'est déjà en binaire. Si maintenant tu cherches à convertir un entier (int) en l'équivalent binaire sous forme de chaine de caractère, bah alors là ton algo est complètement à coté de la plaque.
 
Ça serait plutôt un truc du genre :

Code :
  1. static void print_binary(int nb)
  2. {
  3.     char buffer[65];
  4.     char * p = buffer + sizeof buffer - 1;
  5.     unsigned int i = nb;
  6.     *p-- = 0;
  7.     while (i != 0)
  8.     {
  9.         *p-- = (i & 1) + '0';
  10.         i >>= 1;
  11.     }
  12.     printf("%s", p + 1);
  13. }

n°1858100
leoz2004
Posté le 05-03-2009 à 16:49:53  profilanswer
 

Enfait la man ascii disponible sous freebsd ne comporte pas la valeur de chaque caractère en binaire uniquement en hexa, decimal et octal.
 
Je vais essayer ta methode mais j'ai finalement reussi a le recoder et sa me permet de rentre la base que j'ai decider au prealable ^^
 
il ne me reste plus qu'a retourner la valeur.
 
Merci de ton aide :)
 


---------------
Worldcraze 10loop
n°1858106
leoz2004
Posté le 05-03-2009 à 17:11:02  profilanswer
 

Enfait je suis de retour ^^
Je print bien les nombres mais si je rentre 49 (le caractere ascii) de chiffre 1 je devrais obtenir 00110001 mais j'obtiens 110001.

 

Lorsque j'utilise ma fonction get_nbr_base pour convertir 110001 en decimale cela me retourne 110001, idem pour 00110001... une idee ?

 


Message édité par leoz2004 le 05-03-2009 à 17:11:33

---------------
Worldcraze 10loop
n°1858114
tpierron
Posté le 05-03-2009 à 17:30:12  profilanswer
 

Hmm, 00110001b == 110001b, les zéros de poids fort ne servent à rien (à moins que tu cherches à concaténer une suite de nombre binaire sans séparateur). Si tu veux un padding sur un nombre multiple de huit caractères, tu peux faire un truc du genre:

Code :
  1. static void print_binary(int nb)
  2. {
  3.     char buffer[65];
  4.     char * p = buffer + sizeof buffer - 1;
  5.     unsigned int i = nb;
  6.     *p-- = 0;
  7.     while (i != 0)
  8.     {
  9.         *p-- = (i & 1) + '0';
  10.         i >>= 1;
  11.     }
  12.     while ((p - buffer + 1) & 7) *p-- = '0';
  13.     printf("%s", p + 1);
  14. }

n°1858122
leoz2004
Posté le 05-03-2009 à 17:41:52  profilanswer
 

Justement j'aimerais passer a ma fonction une chaine de caractere qui comprend  64 carractere
(001100010100110010011100011011100011100011011001110011110011000110)
En gros des qu'il rencontre un 0 il envoi un SIGUSR1 et si il rencontre un 1 il envoi SIGUSR2, le probleme c'est que si je souhaite envoyer 10 et 0 je vais lui passer la chaine 100 qui est enfait 4 ^^


---------------
Worldcraze 10loop

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Conversion Decimal to binary et inversement.

 

Sujets relatifs
Problème conversion chaîne en nombreConversion date format UTC
Problème séparateurs lors de la conversion d'un fichier csv en excelEclipse, mingw et erreur not binary found
[python]transformer une ip hex en decimal [résolu][C] Conversion Hexa vers ASCII
Decimal Separator[vba][PHP] Conversion string to float... mais ca marche pas !
conversion cm en pixels et réciproquementConversion d'une image en PNG
Plus de sujets relatifs à : Conversion Decimal to binary et inversement.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR