我在用 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
只是移动它而不读取它。
P.S.:如您所问,我这里的代码读取 bytes。 (大小 1 作为 fread
的第二个参数提供)
关于c - C语言读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2564831/