IEEE 754 à décimal en langage C

Je cherche le meilleur moyen de transformer un nombre à virgule flottante en un nombre décimal en C. Je vais essayer de vous donner un exemple: l’utilisateur introduit un nombre dans IEEE754 (1 1111111 10101 …) et le programme doit renvoyer la représentation décimale (ex. 25.6)
J’ai essayé avec des masques et des opérations au niveau des bits, mais je n’ai aucun résultat logique.

Je crois que ce qui suit exécute l’opération que vous décrivez:

J’utilise int comme une représentation intermédiaire car il a le même nombre de bits que le float (sur ma machine) et permet une conversion facile à partir de la chaîne binary.

 #include  union { int i; float f; } myunion; int binstr2int(char *s) { int rc; for (rc = 0; '\0' != *s; s++) { if ('1' == *s) { rc = (rc * 2) + 1; } else if ('0' == *s) { rc *= 2; } } return rc; } int main(void) { // the input binary ssortingng (4 bytes) char * input = "11000000110110011001100110011010"; float *output; // convert to int, sizeof(int) == sizeof(float) == 4 int converted = binstr2int(input); // strat 1: point memory of float at the int output = (float*)&converted; // cast to suppress warning printf("%f\n", *output); // -6.8 // strat 2: use a union to share memory myunion.i = converted; printf("%f\n", myunion.f); // -6.8 return 0; } 

Comme @DanielKamilKozar le souligne, le type correct pour cet int est uint32_t . Cependant, cela nécessiterait d’inclure .