我正在处理来自一个串行硬件的6字节消息。 在他们的手册中,制造商已经规定每个消息(第6个字节)的校验和是由'消息其余部分的总和的低字节'组成的。我的5字节数据校验和不是
Here is one of their examples, dissected
我还没有尝试过所有这些例子还没有,让我带的第一个“解剖”例如我的工作:
这是公式提供:
Low byte of 0xB2 + 0x00 + 0x69 + 0x1A + 0x83 = 0x68
所以,总和是0x1B8,如果我把第一个8-b它,我得到0xB8 嗯...我做错了吗?
我想了一下,猜测,哦,也许他们只是做一个按位操作,而这在老的硬件上很常见? 所以我写了每一部分的比特和异或系列一起...
- 0xB2^0×00 = 0xB2(杜)
- 0xB2^0×69 =位于0xDB
- 位于0xDB^0x1A的= 0xC1
- 0xC1^0×83 = 的0x42
我的手这样做,并通过计算器。同样的结果。
我能够在我的程序中重现我的计算,我的校验和与硬件输出的不同。手册型号与我所拥有的硬件相匹配...
查看求和的每个部分的二进制数,我不确定我能看到每个他们记录的输出的清晰模式。在一些校验和中,如IPv4头,进位被移位或加回到校验和中,这可能是这种情况吗?
我的问题是:
上午我在做这个校验和是如何被计算的数学错误?
任何帮助将不胜感激!谢谢。
是的,有一位同事也想出了这个。不幸的是,硬件也出现了错误,但一直保持不变。我只是假设规范中的某些内容发生了更改,并且文档已过时。 – WolverineOfLove 2013-05-09 23:12:23