【问题标题】:C How to Search through .dat file looking for Hex patternC如何通过.dat文件搜索寻找十六进制模式
【发布时间】:2014-03-18 14:42:09
【问题描述】:

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

我尝试了各种方法,包括读取缓冲区和使用 (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 00 02 00 AB AB AB AB AB 00 00 00 00 00 00 00 00 00 00 00

任何帮助或建议都将受到高度评价。

【问题讨论】:

    标签: c file hex


    【解决方案1】:

    有点不清楚文件的内容是真的二进制,还是二进制数据的十六进制表示。两者都可以,“.dat”很笼统。

    不管怎样,我会把整个文件加载到内存中,然后:

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

    【讨论】:

    • memmem 并非在所有平台上都存在,因此您可能需要自己编写此函数或查找一些源代码。两者都不应该很困难。
    • @MichaelWalz 谢谢,没有注意到这一点。 :)
    【解决方案2】:

    好的,让我再试一次。

    以 1028 字节缓冲区为例,您正在从更长的字节流中搜索 3 字节模式“00 02 00”。那么,我该如何处理呢?

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2013-05-03
      • 2013-07-07
      • 2013-04-30
      • 2011-01-17
      • 1970-01-01
      • 2016-07-15
      • 2017-06-22
      • 2013-11-05
      相关资源
      最近更新 更多