2

我正在尝试读取存储在二进制文件中的 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。关于我的问题出在哪里的任何想法?

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

谢谢

4

2 回答 2

4

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

于 2009-12-02T16:12:24.083 回答
0

此外,你应该fclose(file)也是。至于浮动,浮动是实现定义的。

您是否考虑使用以下示例中的格式说明符以这种方式进行操作:

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

这会将 的值格式化为v句点后的 8 位和 2 位小数,从而将浮点数四舍五入到您的预期输出。在我看来,二进制文件是在大端平台上编写的。在此处查看如何执行此操作,并在此处阅读有关字节序业务的信息。

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

希望这会有所帮助,最好的问候,汤姆。

于 2009-12-02T16:34:44.283 回答