我正在解析大量的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电子表格 - columns =内存地址,row =新数据。我需要为每个列处理这种模式。
这可以是"直播" (处理数据) - 或者将几个数据序列保存到数组中并以块的形式解析,这样更容易
c ++代码片段,伪代码或一般策略提示表示赞赏 提前感谢任何指导
-mleega
答案 0 :(得分:0)
我只想看看每个值是否大于之前的值,丢弃等于先前值的值。然后听起来你只需要检测七个增量然后减少。