[英]Reading Binary file in C
我在C中读取二进制文件有以下问题。
我已经读过二进制文件的前8个字节。 现在我需要从第9个字节开始读取。 以下是代码:
fseek(inputFile, 2*sizeof(int), SEEK_SET);
但是,当我打印存储检索值的数组的内容时,它仍然显示前8个字节,这不是我需要的。
有人可以帮我解决这个问题吗?
假设:
FILE* file = fopen(FILENAME, "rb");
char buf[8];
您可以读取前8个字节,然后读取接下来的8个字节:
/* Read first 8 bytes */
fread(buf, 1, 8, file);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
或者使用fseek
跳过前8个字节并读取接下来的8个字节(如果将文件中的第一个字节计为0,则包括8 ... 15):
/* Skip first 8 bytes */
fseek(file, 8, SEEK_SET);
/* Read next 8 bytes */
fread(buf, 1, 8, file);
理解这一点的关键是C库函数会自动保留文件中的当前位置 。 fread
在执行读取操作时移动它,因此下一个fread
将在前一个完成之后立即开始。 fseek
只是移动它而不阅读。
PS:我的代码在这里读取问题所需的字节 。 (作为fread
的第二个参数提供的大小1)
fseek
只是移动文件流的位置指针; 一旦你移动了位置指针,你需要调用fread
来实际读取文件中的字节。
但是,如果您已经使用fread
从文件中读取了前八个字节,则位置指针指向第九个字节(假设没有错误发生,文件长度至少为9个字节)。 当你调用fread
,它会使位置指针前进一个读取的字节数。 您无需致电fseek
移动它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.