.net 如果后面有特定字符,如何将字符串拆分为多个字符串

flseospp  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(217)

我收到字节码并试图解释它。由于这是两个设备之间使用哈特协议(主/从)的通信,我想先对字节进行排序。
以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不必这样做。
也许解决方案是正则表达式,但不幸的是,我不是一个专业人士。

6fe3ivhb

6fe3ivhb1#

你确实可以使用regex来完成这个任务,它看起来像这样:

var match = Regex.Match(input[0], "(?<request>82.*)(?<answer>86.*)");
var request = match.Groups["request"].Value; // empty string for invalid input
var answer = match.Groups["answer"].Value;   // empty string for invalid input

然而,使用字符串来存储这种类型的数据似乎很奇怪,字节数组似乎更好,但这样就不能再使用正则表达式了。
我想您稍后会用到answer和response,所以您的问题看起来很适合解析器生成器,我建议您看看SpracheSuperpower

相关问题