我正在处理来自一个串行硬件的 6 字节消息。在他们的手册中,制造商已经规定每条消息的校验和(其第 6 个字节)由“其余消息总和的低字节”组成。
我还没有尝试所有这些示例,让我展示我在第一个“剖析”示例中的工作:
这是提供的公式:
Low byte of 0xB2 + 0x00 + 0x69 + 0x1A + 0x83 = 0x68
所以,总和是 0x1B8,如果我取前 8 位,我得到0xB8 嗯……我做错了吗?
我想了想,猜到了,哦,也许他们只是做一个按位运算,这在旧硬件上很常见,对吧?所以我把每个部分的部分都写了出来,然后把这个系列异或在一起……
- 0xB2 ^ 0x00 = 0xB2(呵呵)
- 0xB2 ^ 0x69 = 0xDB
- 0xDB ^ 0x1A = 0xC1
- 0xC1 ^ 0x83 = 0x42
我是用手和计算器完成的。结果相同。
我能够在我的程序中重现我的计算,我的校验和与硬件输出的完全不同。手动型号与我拥有的硬件相匹配...
查看总和每个部分的二进制文件,我不确定我能否看到每个记录输出的清晰模式。在某些校验和中,例如 IPv4 标头,进位被移动或添加回校验和,这可能是这种情况吗?
我的问题是:
我是否在计算此校验和时出现数学错误?
任何帮助将不胜感激!谢谢你。