Erreur de lecture ?

maniqk -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à convertir des nombres écrits en binaire 32 bits (pour des float single precision) en float. Je ne sais pas si c'est clair mais en gros j'ai 32 bits qui représentent un float, et je veux écrire le float correspondant.


Exemple : 11000001000000000000000000000000 -> -8


Le fait est que mes nombres sont écrits dans un fichier généré par un autre programme.


Le problème est que j'ai l'impression qu'il ne lit pas correctement mes données.


En fait, je lis ma ligne que je stocke dans une chaine[32].
Là, à l'aide du printf je remarque qu'il me donne la correspondance ASCII des caractères lus.
Avec l'exemple pris ci-dessus, quand je fais printf(chaine[0]); il m'affiche "49" ce qui correspond au caractère ASCII du chiffre "1".


Du coup, j'ai fait le traitement suivant :


for(i=0;i<32;i++){
   chaine[i] -= 48;
}



Là du coup, quand je print mon nouveau chaine[0] je trouve bien mon "1".


Par contre, ensuite je veux faire la conversion...
J'épargne les détails mais quand je fais printf("%d",(-1)^(int)chaine[0]); il me sort -2...


Est ce que quelqu'un verrait pourquoi ?


De fait, lorsque je fais ma conversion "totale" du nombre, au lieu de trouver -8, je trouve 70...


Voilou, merci d'avance pour vos éclaircissements,
maniqk

2 réponses

maniqk
 
Bon et bien je ne sais pas trop pourquoi ça ne marchait pas, il semble que ce soit le caractère "^" dans a^b qui n'est pas compris.
J'ai contourné ce problème en incluant math.h et en utilisant pow(a,b) -> nickel !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour

Petit complément, ^ en C signifie Xor et non puissance.

Cdlt,
0