【发布时间】:2011-06-04 18:02:01
【问题描述】:
我正在处理一个 COM 端口应用程序,我们有一个已定义的可变长度数据包结构,我正在与一个微控制器通信。数据包具有开始和停止字节的分隔符。问题是有时读取缓冲区可能包含无关字符。似乎我总是会得到整个数据包,只是在实际数据之前/之后有一些额外的喋喋不休。所以我有一个缓冲区,每当从 COM 端口接收到新数据时,我都会将数据附加到该缓冲区。搜索此缓冲区以查找我的数据包的任何可能出现的最佳方法是什么?例如:
假设我的数据包分隔符是0xFF,我有一个这样的数组
{ 0x00, 0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF, 0x04 }
如何创建一个函数/LINQ 语句来返回所有以分隔符开头和结尾的子数组(几乎就像带有通配符的滑动相关器)?
示例将返回以下 3 个数组:
{0xFF, 0x02, 0xDA, 0xFF}, {0xFF, 0x55, 0xFF}, and
{0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF}
【问题讨论】:
-
我原以为返回的数组是 {0x00} { 0x02, 0xDA} 和 {0x55},但除此之外,如果这表示近似的实际数组大小,并且分隔符是只有一个字节长,为什么不做一个简单的循环呢?它可能会胜过 linq。
-
@Willem:是的,同意所有观点。
-
@Willem van Rumpt - 我用 LINQ 措辞了问题标题,因为这通常会在 SO 上获得成功,但在问题中我指定了“函数/LINQ 语句”,因为我知道非常真实的可能性一个优雅的 LINQ 解决方案很可能需要比循环更长的时间。我对任何一个都持开放态度,我只想让一年内落后于我的人知道除了代码中的“//解码数据包”之外我做了什么。
-
啊哈。我错过了“函数/LINQ 语句”短语。威廉,乔尔领先我们一步。
-
@yodaj & Joel:我也错过了:)