如何读取二进制文件并将输出显示为C中的float?

时间:2009-12-02 16:08:30

标签: c file-io floating-point endianness

我正在尝试读取存储在二进制文件中的4字节数字,但我似乎没有得到正确的输出。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main ()
    {
        int res;
        FILE *file;
        float v;

        //Open file
        file = fopen("prj3.dat", "rb");
        if (!file)
        {
            printf("Unable to open file input.dat\n");
        }
        else
        {
            res = fread(&v, sizeof(v), 1, file);
            if(res==-1)
            {
                printf("Unable to open file input.dat\n");
            }
            else
            {
                printf("v = %f\n", v);
            }
        }

        return;
    }

我的输出是v = -961576900.0000000,但它应该是v = 3.14159。关于我的问题在哪里的任何想法?

NB。 input.dat是二进制文件:11010000 00001111 01001001 01000000

由于

2 个答案:

答案 0 :(得分:4)

确保fread返回相同的sizeof(float)值,这是您正在阅读的大小。还要确保文件光标位于正确的位置,否则请使用fseek。最后,你的文件是用big-endian机器编写的吗?它保存得当吗?代码对我来说似乎没问题。

答案 1 :(得分:0)

此外,您还应该fclose(file)。至于浮点数,浮点数是实现定义的。

你不会考虑使用格式说明符这样做,如下例所示:

printf("%8.2f\n",v);  

这将v的值格式化为8个位置,并在句点之后将2个小数位格式化,从而将浮点数舍入到预期输出。在我看来,二进制文件是在big-endian平台上编写的。请查看here了解如何执行此操作,并阅读here关于endianess业务的信息。

编写一个小程序来测试创建二进制文件的原始系统上的字节顺序,并在您的计算机上运行它并检查结果。

希望这有帮助, 最好的祝福, 汤姆。