队列选择特定条目之间的范围

时间:2013-12-28 04:49:31

标签: c# c#-4.0

我正在创建一个串行协议解析器,并希望有一些帮助过滤队列数据。我以前创建过串口解析器(使用c / c ++),但这次我使用的是C#,我省略了一个新手。

串行协议遵循以下格式:

byte StartByte  (SOH = 0x01)
byte MsgCode
byte PayloadLength
byte[] Payload
byte StopByte (EOT = 0x04)

我有以下队列定义:

Queue<byte> rxByteQueue = new Queue<byte>(64);

当从串行端口接收字节时,它们被添加到rxByteQueue。

我尝试完成以下任务:

  1. 选择StartByte和StopByte之间(包括)的所有字节。
    • 这可能包括也可能不包括嵌套条目
  2. 检查每个条目上串行数据包的有效性
  3. 如果条目有效,则将从队列中删除相应的字节范围
  4. 我可以处理#2和#3项,但感觉可能有一种很好的方法可以使用LINQ完成#1。

1 个答案:

答案 0 :(得分:0)

这是最简单的方法,但它不适用于嵌套条目。

var message = rxByteQueue.SkipWhile(x => x != 0x01)
                         .TakeWhile(x => x != 0x04)
                         .Concat(new byte[] { 0x04 });

顺便说一下。嵌套条目如何?