【发布时间】:2015-12-05 13:56:52
【问题描述】:
我正在解析大量 CAN 数据是十六进制格式,它以串行数据类型格式生成并连续流式传输。我正在寻找非常具体的重复模式,这些模式很容易用眼球法快速找到,但我的任务是自动化这个过程。使用 c++ 工作,但实际上这是一个与语言无关的问题,更多地涉及完成此任务的逻辑/算法。
特定模式是一个递增值,有 8 个“步”,然后重复 例子:
1. F0 01 A2 23 74 B5 06 07 E0 11 72 C3 D4 95 36 07 ...
2. 00 02 04 06 08 0A 0C 0E 00 02 04 06 08 0A 0C 0E ...
3. 01 02 03 04 05 06 07 08 00 01 02 03 04 05 06 07 08 00 ...
4. 00 20 40 60 80 A0 C0 E0 00 20 40 60 80 A0 C0 E0 ...
Example 1 -> low nibble, pattern = 0123456701234567
Example 2 -> low nibble, pattern = 02468ACE02468ACE
Example 3 -> low nibble, pattern = 123456780123456780
Example 4 -> high nibble, pattern = 02468ACE02468ACE
请注意,示例 3 实际上计数为 9,但在本例中,实际计数为 12345678,而 0 是“垃圾”(但始终为 0)
未使用的半字节是 100% 随机的,如示例 1 所示。但其他示例我只是将 0 放在那里以便更容易可视化。
稍微混淆一下,这些模式中的任何一个都可能被“拉伸” - 换句话说,每个特定值在递增到下一个值之前可能会重复 X 次
示例: 00 00 00 01 01 02 02 02 03 03 03 04 04 04 04 05 05 06 06 07 07 07
永远不会有乱序的字节——所以上面的整个模式都是按顺序排列的
另外 - 我们想抛弃“短”模式
8 计数场景的错误示例:
00 01 02 03 04 05 00 01 02 03 04 05 00 01
这个不好的例子正确地遵循了所有规则,但它不是必需的 8 个计数。
我们一次可以访问/处理 5 个字节,并且每隔几毫秒就会有新值出现。有几百个字节要处理。使用 Excel 很简单,只需查看数据,努力想出在代码中执行此操作的策略/算法。
可视化如何接收数据的最佳方式是 Excel 电子表格 - 列 = 内存地址,行 = 新数据。我需要为每一列处理这种模式。
这可以是“实时的”(处理传入的数据) - 或者将多个数据序列保存到一个数组中并以块的形式解析它,这更容易
c++ 代码 sn-ps、伪代码或一般策略提示表示赞赏 提前感谢您的任何指导
-mleega
【问题讨论】:
-
您正在寻找的内容听起来与压缩算法非常相似,后者会找到重复序列。如果您从一种这样的算法开始并放松“重复序列”条件(例如将最低位归零以减少传感器噪声)以满足您的需求,您可能会足够接近。这些算法通常也适用于流式数据
标签: algorithm