gpt4 book ai didi

c - 在 C 中匹配二进制模式

转载 作者:太空狗 更新时间:2023-10-29 17:08:51 25 4
gpt4 key购买 nike

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

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

例如,有两个我感兴趣的特定结构,它们具有以下二进制模式(x 表示 0 或 1)

 0000-00xx-xxxx-xxx0
0000-10xx-10xx-xxx0

在这些结构中,“x”位包含我需要的实际数据,因此基本上我需要一种方法来根据位在每个结构中的写入方式来识别每个结构。

以伪代码为例:

if (binaryPattern = 000010xxxxxxxxx0) {
do something with it;
}

我猜想将它们作为整数读取,然后执行某种位掩码是可行的方法,但我对 C 的了解并不多,也许一个简单的逻辑或运算就可以做到,但我在我开始之前,我只是想得到一些关于这样做的建议。

谢谢

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

最佳答案

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

例如,检查您的数据是否匹配 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)
-------------------- --------------------

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

关于c - 在 C 中匹配二进制模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com