C,从bin文件中读取二进制文件

我对C很陌生,但我遇到了一个问题…

我的最终目标是从.bin文件中读取(然后printf到控制台)二进制文件,但是现在我一步一步地尝试只读取第一位…

我的代码:

... FILE *file = fopen("test1.bin", rb); int i = 0; fread(&i, 1, 1, file); printf("%i\n", i); ... 

现在我尝试了三个不同的.bin文件,一个输出0,另外两个输出12个!

当我从文件中读取1位时,为什么输出2/12? 不应该是0还是1? 我究竟做错了什么? 非常感谢。

fread()调用更改为:

 fread(&i, sizeof(int), 1, file); 

第二个参数是要读取的元素的大小,第三个参数是要读取的元素的数量。 发布的代码将单个字节读入int

您还应该检查fopen()fread()调用的返回值,以确保它们成功。

就像@hmjd所说,你应该读取填充int值所需的字节数。 所以这样:

 len = fread(&i, sizeof(int), 1, file); 

或者这样:

 len = fread(&i, 1, sizeof(int), file); 

第一种情况是读取一个int值(通常为4个字节)。 在调用之后,如果读取成功,则len应该等于1。

第二种情况将多个字节读入int值。 不同之处在于,在此调用之后, len应该等于sizeof(int)

无论哪种方式都可行,唯一的区别是第一种方式指定读取多字节单个对象( int ),而第二种方式指定读入对象的字节数。 这是一个微妙的差异,当然,人们会不同意哪个是最好的。

第二种方法的优点是len确切地告诉你实际读取了多少字节(这可能对调试I / O错误很有用)。 第一种方法的优点是它在概念上更简单的成功测试(是一个int读取还是不读?)。

但无论你怎么做,你都应该检查fread()的返回值。