C语言中的IEEE 754转十进制

IEEE 754 to decimal in C language

我正在寻找将浮点数转换为其在 C 中的十进制表示的最佳方法。我将尝试给您举个例子:用户在 IEEE754 中引入一个数字 (1 1111111 10101...) 并且程序必须 return 十进制表示法(例如 25.6)
我试过掩码和按位运算,但没有得到任何合乎逻辑的结果。

我相信以下操作正在执行您描述的操作:

我使用 int 作为中间表示,因为它与浮点数(在我的机器上)具有相同的位数,并且它允许从二进制字符串轻松转换。

#include <stdio.h>

union {
    int i;
    float f;
} myunion;

int binstr2int(char *s)
{
    int rc;
    for (rc = 0; '[=10=]' != *s; s++) {
        if ('1' == *s) {
            rc = (rc * 2) + 1;
        } else if ('0' == *s) {
            rc *= 2;
        } 
    }
    return rc;
}

int main(void) {

    // the input binary string (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;
}

正如@DanielKamilKozar 指出的那样,int 的正确类型是 uint32_t。但是,这需要包括 <stdint.h>.