C如何搜索.dat文件以查找十六进制模式

时间:2014-03-18 14:42:10

标签: c file hex

我正在尝试通过一个.dat文件来读取特定的HEX签名00 02 00,当它找到需要从签名开头复制744字节到缓冲区的签名时才能使用C.

我尝试了各种方法,包括读入缓冲区和使用(strtol / strtok / fscanf),而且我的选项用完了。

以下是dat文件的示例,这是00 02 00在ASCII中的样子.☻。

AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB 00 00 00 00 00 00 00 00 00 00 00

任何帮助或建议都会受到高度关注。

2 个答案:

答案 0 :(得分:0)

有点不清楚文件的内容是否真的是二进制,或二进制数据的十六进制表示。两者都是可能的," .dat"非常一般。

无论如何,我会将整个文件加载到内存中,然后:

  • 如果是二进制文件:使用memmem()查找"\x00 \x02 \x00"。这个函数是一个GNU扩展:如果你没有它,你需要写它。
  • 如果是text:使用strstr()查找"00 02 00"(三个字节)。

答案 1 :(得分:0)

好的,让我再试一次。

给出1028字节缓冲区的示例,您将从更长的字节流中搜索3字节模式“00 02 00”。那么,我该怎么处理呢?

使用它来实现循环缓冲区:How do you implement a circular buffer in C?

当数据运行不足时重新填充缓冲区,例如剩下2个字节用于搜索3字节模式。坚持下去,直到完成。小心所有边界情况,但不要太难。