我正在尝试计算 m-bus 数据帧的校验和。在此 PDF 的第 1 页中,我能够读到帧的校验和“是根据上述数据的算术和计算得出的,不考虑进位数字”。我上面的数据是字节:
- 开始
- L场
- L场
- 开始
- C场
- 一个领域
- CI 字段
- 支票金额
- 停止
在第 2 页中,我们可以找到有效数据框的一个示例:
68 03 03 68 53 01 BB 0F 16
在十六进制中,校验和为 0F。不幸的是,我一定是做错了什么,因为我无法达到那个价值。
有人能解释一下这个算法是如何找到校验和的吗?
我正在尝试计算 m-bus 数据帧的校验和。在此 PDF 的第 1 页中,我能够读到帧的校验和“是根据上述数据的算术和计算得出的,不考虑进位数字”。我上面的数据是字节:
在第 2 页中,我们可以找到有效数据框的一个示例:
68 03 03 68 53 01 BB 0F 16
在十六进制中,校验和为 0F。不幸的是,我一定是做错了什么,因为我无法达到那个价值。
有人能解释一下这个算法是如何找到校验和的吗?
仅一个样本永远不足以回答校验和查询您需要一堆样本来关联和查找模式
所以看看链接的pdf似乎很清楚
跳过开始并对数据求和并提取至少两个字节
skip sum mask
x,x,x,x | y,y,... 0x000000ff = checksum
所以你发布的样本将是
skip | sum
68 , 3 ,3 68 | 53 , 01 , bb | =
校验和
"{0:X2}" -f ((0x53+0x1+0xbb) -band 0x000000ff) = 0x0f seems to match
在 pdf 中的其他序列上运行这个似乎符合
PS C:\> $a = "{0:X2}" -f ((0x53+0xfe+0x51+0x01+0x7a+0x01) -band 0x000000ff) ; $a
1E
PS C:\> $a = "{0:X2}" -f ((0x73+0x01+0x51+0x01+0x7A+0x02 ) -band 0x000000ff) ; $a
42