在C中匹配二进制模式

Ton*_*ony 7 c binary bitmask pattern-matching

我正在开发一个需要解析一些定制数据结构的C程序,幸运的是我知道它们是如何构造的,但是我不知道如何在C中实现我的解析器.

每个结构的长度为32位,每个结构都可以通过它的二进制签名来识别.

作为一个例子,有两个我感兴趣的特殊结构,它们有以下二进制模式(x表示0或1)

 0000-00xx-xxxx-xxx0
 0000-10xx-10xx-xxx0
Run Code Online (Sandbox Code Playgroud)

在这些结构中,'x'位包含我需要的实际数据,因此基本上我需要一种基于每个结构中如何写入位来识别每个结构的方法.

所以作为伪代码中的一个例子:

if (binaryPattern = 000010xxxxxxxxx0) {
do something with it;
}
Run Code Online (Sandbox Code Playgroud)

我猜测将它们作为整数读取,然后执行某种bitmasking将是要走的路,但我对C的了解并不是很好,也许一个简单的逻辑OR运算就可以做到,但我只想要一些在我开始之前做这个的建议.

谢谢

非常感谢所有回答的人,非常有帮助!

Sha*_*hin 6

要检查您的数据是否与特定的二进制模式匹配,您可以先屏蔽掉非签名位,然后将其与签名模板进行比较。

例如,要检查您的数据是否与 0000 10xx 10xx xxx0 签名匹配:

  1. 和你的输入数据 1111 1100 1100 0001 (掩码)
  2. 检查输出是否等于 0000 1000 1000 0000(模板)

用一些示例数据来说明:

DATA_1   0010 1011 1101 1100                DATA_2   0000 1011 1010 1100
  MASK   1111 1100 1100 0001  &               MASK   1111 1100 1100 0001  &
        --------------------                        --------------------
         0010 1000 1100 0000 (NO_MATCH)              0000 1000 1000 0000 (MATCH)
        --------------------                        --------------------
Run Code Online (Sandbox Code Playgroud)

因此,您的每个规则都可以由掩码模板对表示,您需要的只是一个函数/操作,将上述操作应用于您的数据以检查它是否匹配。