我有一个浮点数组,我想以二进制形式输出到文件中。我的相关代码如下:
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];
}
答案 0 :(得分:2)
不知道这是否相关,但你有一个相当严重的问题:
tempArray = malloc(size);
您应该更改它以防止缓冲区溢出:
tempArray = malloc(size * sizeof(float));
哦,你也忘了在阅读之前回到文件的开头(这就是为什么它“什么都不给你”):
fseek(bofFile, 0, SEEK_SET);
答案 1 :(得分:0)
您的输入文件是如何格式化的?您的代码假定它看起来也是随机的&#39;在文本编辑器中查看时。您是否尝试过显示整个阵列,以确保正确读取输入文件中的数据?此外,您有一个别人指出的malloc()问题。
IEEE浮点格式的二进制表示不直观,它看起来像随机数据。