【发布时间】:2012-02-29 02:27:18
【问题描述】:
您好,在我的项目中,我需要读取一个 .bin 文件,其中包含 short(16 bit values) 形式的传感器数据。我正在使用fread 函数到缓冲区中执行此操作,但我觉得读入没有正确发生。我的意思是我写的和读到的不一致。你们能建议这里出了什么问题吗?这不是我项目中的代码...我只是想验证fread 和fwrite 函数。
#include<stdio.h>
void main()
{
FILE *fp = NULL;
short x[10] = {1,2,3,4,5,6,5000,6,-10,11};
short result[10];
fp=fopen("c:\\temp.bin", "wb");
if(fp != NULL)
{
fwrite(x, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
rewind(fp);
fread(result, 2 /*sizeof(short)*/, 10 /*20/2*/, fp);
}
else
exit(0);
printf("\nResult");
printf("\n%d",result[0]);
printf("\n%d",result[1]);
printf("\n%d",result[2]);
printf("\n%d",result[3]);
printf("\n%d",result[4]);
printf("\n%d",result[5]);
printf("\n%d",result[6]);
printf("\n%d",result[7]);
printf("\n%d",result[8]);
printf("\n%d",result[9]);
fclose(fp)
}
在我执行 fread()(十六进制值)之后:
temp.bin:
01 02 03 04 05 06 e1 8e 88 06 ef bf b6 0b...
在我执行 fwrite() 之后
stdout:
Result
0
914
-28
-28714
-32557
1
512
-32557
908
914
【问题讨论】:
-
您是否尝试过关闭然后重新打开文件?如果您写入文件然后立即读取文件,我不确定文件的内容是什么。您可能必须先关闭它以确保数据被清除?另外,请确保您打开它以第二次阅读...
-
如果你要使用 fread/fwrite,真的应该在文件模式下使用 'b'。阅读文本文件时有很多搞砸或奇怪行为的机会。大多数实现都在 fread/fwrite 中进行文本翻译,但正如我所说,这可能会导致问题(翻译后的 CR/LF 可能导致写入的数据比预期的多或读取的数据少)。使用 fgets/fputs 读取/写入文本文件。
标签: c binaryfiles fwrite fread