我正在开发一个程序,它从串口读取二进制数据流,需要解析和格式化输入。
数据不断读取,需要显示为完整字符串。每个字符串具有3个字节的“起始码”和3个字节的“结束码”。我需要编写一个解析器,它将根据开始和结束代码找到数据 - 我假设一个正则表达式解析器是这样做的方法。
我在最后一两天读了一堆正则表达式,但它只是没有点击。帮助
开始代码:0x16< 0x02(不会被空格分隔) 结束代码:0x03> 0x17(不会被空格分隔)
任何人都可以给出能找到这些值的正则表达式吗?有没有办法在c#中找到它们而不从字符串中删除它们(即不考虑它们中的正常分隔符,例如String.Split())?
答案 0 :(得分:1)
如果它只是匹配几个字节值,你可以看一下编写一个简单的有限状态机来匹配开始和结束。更容易测试并代表代码。
答案 1 :(得分:0)
在这种情况下,我认为正则表达式是过度的。我只是在数据字节到达时缓冲它们,并在收到每个字节后检查是否以您的结束代码结束。大致相似的东西(即时编写,不只是粘贴和编译):
var buffer=new List<byte>();
var endCode=new byte[] {3, '>', 0x17};
// In a loop:
byte? received=ReceiveByte(); //Return null if no new byte available
if(byte.HasValue) {
buffer.Add(received);
if(buffer.Skip(buffer.Count()-endCode.Length).Take(endCode.Length).SequenceEqual(endCode){
//Process the received data in buffer
buffer.Clear();
}
}
答案 2 :(得分:0)