0

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

    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];
    }
4

2 回答 2

2

不知道这是否相关,但是您在这里遇到了一个相当严重的问题:

tempArray = malloc(size);

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

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

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

fseek(bofFile, 0, SEEK_SET);
于 2012-09-27T04:35:38.383 回答
0

您的输入文件是如何格式化的?您的代码假定在文本编辑器中查看时它也会看起来“随机”。您是否尝试过显示整个数组,以确保您从输入文件中正确读取数据?此外,您还有其他人指出的 malloc() 问题。

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

于 2012-09-27T04:55:58.390 回答