0

我正在处理来自一个串行硬件的 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 标头,进位被移动或添加回校验和,这可能是这种情况吗?

我的问题是:

我是否在计算此校验和时出现数学错误?

任何帮助将不胜感激!谢谢你。

4

1 回答 1

1

我刚刚用 Windows RT 计算器攻击了所有样本,所有其他样本(这里)都很好——这只是第一个错误的例子(你剖析的)。这看起来像是一个简单的文档错字。

于 2013-05-09T23:05:39.120 回答