【发布时间】:2021-12-29 02:52:19
【问题描述】:
我目前正在使用 fgets() 解析“.dat”文件,如下所示。
#include <iostream>
int main(int argc, char **argv)
{
FILE *fp = fopen( argv[1], "r+");
unsigned char pu8bufsend[256];
printf("%s\n", argv[1]);
fseek(fp, 58, SEEK_SET);
while(fgets((char*)pu8bufsend, 128*2, fp) != NULL)
{
for (size_t j = 0; j < 256; j++)
{
printf("%02x , %d\n", pu8bufsend[j], j);
}
}
}
当我解析某个“.dat”文件时,前 20 个输出如下所示。
c0 , 0
a8 , 1
0a , 2
00 , 3
00 , 4
00 , 5
00 , 6
00 , 7
86 , 8
aa , 9
2b , 10
1d , 11
ff , 12
7f , 13
00 , 14
00 , 15
e8 , 16
7a , 17
40 , 18
00 , 19
00 , 20
但是,我应该从“.dat”文件中获取这个突出显示的部分。
这应该很简单,但不明白我为什么要为此苦苦挣扎。
谁能解决我的问题?
【问题讨论】:
-
一个问题是数据包含空字节,这使得
fgets()成为该工作的错误工具。您可能需要使用fread();如果你小心点,你也许可以使用 POSIXgetline()。 -
这是 C 还是 C++?
-
@JonathanLeffler 我刚刚尝试了 fread() 仍然没有用...这是用 C++ 编写的。
-
@JonathanLeffler。你怎么知道数据是否包含空字节?
-
在你的文字图片中看到的数字是不是你要阅读的文件的内容(顺便说一句,这不是一个好主意,否则我现在可以在这里引用......)不是你试图阅读的文件的内容吗?其中第一个有问题的数字,即您没有进入输出的第一个数字是
0x0D,从fgets()的角度来看,这是回车。乔纳森所指的零也在那里....