【发布时间】:2015-04-20 22:03:57
【问题描述】:
我对二进制文件以及如何读取它们感到有些困惑,所以如果有人可以提供帮助,那就太好了。 我有一个包含以下位的文件:
00000000000000000000000000000111
(32 位。我数了)
现在我写了这段代码:
int main()
{
FILE * f1;
f1 = fopen("file2", "rb");
int i = 0;
fread(&i, sizeof(int), 1, f1);
printf("%d", i);
fclose(f1);
return 0;
}
打印出我 808464432。 为什么?它不应该打印 7 吗? 感谢您的阅读。
【问题讨论】:
-
如何查看文件内容?
-
打印出您的
sizeof(int)。您可能正在处理一个 2byte int,这意味着您正在读取两个字节的 0 位,这意味着您的“int”将是0。你是怎么数位的?如果您的文件是“二进制”文件,那么它的文件大小为 4 个字节。如果是文本,则为 32 个字节。 -
我的sizeof(int)是4,不好意思误导了你,输出是808464432,不是0。
-
...这意味着,Iharob 的猜测是正确的,并且该文件不包含 bits 0000....,但包含 0 个字符(ASCII 中的 0x30),后跟一些 1 个字符。 808464432 = 0x30303030
-
fwrite(&i, sizeof i, 1, f1);) 请注意,这些文件是不可移植的(您不能在一台机器上写入并在另一台机器上读取)并且对于使用不同编译器编译的代码可能不一致(如果它们是ABI 不兼容)。
标签: c binaryfiles fread