我收到字节码并试图解释它。由于这是两个设备之间使用哈特协议(主/从)的通信,我想先对字节进行排序。
以82开头的请求和以86开头的应答。它们之间可以是任意数量的FF(取决于通过的FF数量),用作前序。
下面是一个示例输出:
82 05 C6 00 46 5D 03 00 59 FF FF FF FF FF 86 05 C6 00 46 5D 03 1A 00 00 41 4C BE B2 3B 40 F6 4D B7 24 C2 23 B2 40 20 41 B5 BA 3D AA 7F A0 00 00 20 FF FF FF FF
82 05 C6 00 46 5D 03 00 59 FF FF FF FF 86 05 C6 00 46 5D 03 1A 00 00 41 4C BE D5 3B 40 F6 4D F5 24 C2 23 B2 40 20 41 B5 63 04 AA 7F A0 00 00 E5 FF FF FF FF
82 05 C6 00 46 5D 03 00 59 FF FF FF FF FF 86 05 C6 00 46 5D 03 1A 00 00 41 4C BE F6 3B 40 F6 4E 2E 24 C2 23 B2 40 20 41 B5 76 E7 AA 7F A0 00 00 E8 FF FF FF FF
82 05 C6 00 46 5D 03 00 59 FF FF FF FF FF 86 05 C6 00 46 5D 03 1A 00 00 41 4C BF 01 3B 40 F6 4E 41 24 C2 23 B2 40 20 41 B5 67 34 AA 7F A0 00 00 B3 FF FF FF FF
以下是我尝试将请求和响应分开的步骤:
string[] delimiterChars = {
"FF FF FF FF FF FF FF FF FF FF ",
"FF FF FF FF FF FF FF FF FF ",
"FF FF FF FF FF FF FF FF ",
"FF FF FF FF FF FF FF ",
"FF FF FF FF FF FF ",
"FF FF FF FF FF ",
"FF FF FF FF ",
"FF FF FF ",
"FF FF ",
"FF "
};
string[] words = OnlyHex.Split(delimiterChars, StringSplitOptions.RemoveEmptyEntries);
这很好用,但不幸的是消息中可能有FF,我的代码没有捕捉到。
我可以将这些数字添加到delimiterChars的每个字符串数组条目中,但我不认为这是最好的解决方案,而且会使请求和响应无法分离,因为数字会丢失。
如果接下来的部分以82或86开头,我怎么才能使弦只被分开呢?82和86应该仍然在分开的弦中。FF不必这样做。
也许解决方案是正则表达式,但不幸的是,我不是一个专业人士。
1条答案
按热度按时间6fe3ivhb1#
你确实可以使用regex来完成这个任务,它看起来像这样:
然而,使用字符串来存储这种类型的数据似乎很奇怪,字节数组似乎更好,但这样就不能再使用正则表达式了。
我想您稍后会用到answer和response,所以您的问题看起来很适合解析器生成器,我建议您看看Sprache或Superpower。