2的补码校验和

时间:2019-04-23 14:54:07

标签: javascript math checksum addition

我正在尝试实现一个protocol,它使用无法复制的某些校验和计算。

规范说校验和应为“ 7位,命令和消息字段的2的补码和” (m.s.b. = 0)”。

根据我的观点,应该可以使用以下方法进行计算:

const data = [0x04, 0x00, 0x10, 0x10, 0x18, 0x57, 0x05]
let sum = 0x00
for (let value of data) {
  sum += value
}
const chk = 256 - sum // OR (~sum + 1) & 0xFF

console.log('0x' + chk.toString(16).padStart(2, '0'))

请参见https://repl.it/repls/UntidySpotlessInternalcommand

但是,我得到的结果是0x68,而我的示例中说它应该是0x78。

我在计算2的补码和时是否误解了?

该示例取自成功执行的命令,该命令在制造商提供的控制台窗口中可见。

Example

分解为:

SOM   10 02
CMD   04 (CONNECTED)
DATA  00 10 10 18 57
BTC   05
CHK   78
EOM   10 03

1 个答案:

答案 0 :(得分:3)

您应该与制造商联系。即使使用编程计算器并确保仅使用7位,校验和仍为0x68。我不能完全确定您的计算是否正确(根据其他评论),可能不是7位。但是无论如何,您提供的数字总和是7位数字,因此在示例中给出的数字无关紧要。不过,这对于其他数据可能很重要。但一定要联系公司,因为正确的校验和似乎为0x68。