在C中写入二进制文件并不起作用

时间:2012-09-27 03:29:04

标签: c file-io binary

我有一个浮点数组,我想以二进制形式输出到文件中。我的相关代码如下:

    FILE *binFile;

    binFile = fopen(fileName, "wb");

    if (binFile)
    {
          fwrite(completeList, sizeof(float), size, binFile);
    }

现在,completeList是我所谈论的浮点数组的指针,而size是我传递的另一个参数,表示有多少元素。

当输出到二进制文件时,打开该文件会显示一堆随机ASCII字符。我知道这是我应该期待的,但当我通过一个十六进制编辑器时,它显示随机废话。

我做错了什么?

编辑:

我的解析代码:

    FILE *bofFile = fopen(file, "rb");

    if(bofFile)
    {
        float *tempArray;

        fseek(bofFile, 0, SEEK_END);

        unsigned long int size = ftell(bofFile) / sizeof(float);

        tempArray = (float *)malloc(size);

        fread(tempArray, sizeof(float), size, bofFile);

        std::cout << tempArray[0];
    }

2 个答案:

答案 0 :(得分:2)

不知道这是否相关,但你有一个相当严重的问题:

tempArray = malloc(size);

您应该更改它以防止缓冲区溢出:

tempArray = malloc(size * sizeof(float));

哦,你也忘了在阅读之前回到文件的开头(这就是为什么它“什么都不给你”):

fseek(bofFile, 0, SEEK_SET);

答案 1 :(得分:0)

您的输入文件是如何格式化的?您的代码假定它看起来也是随机的&#39;在文本编辑器中查看时。您是否尝试过显示整个阵列,以确保正确读取输入文件中的数据?此外,您有一个别人指出的malloc()问题。

IEEE浮点格式的二进制表示不直观,它看起来像随机数据。