2的补码校验和

问题描述 投票:2回答:1

我试图实现一个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
javascript math checksum addition
1个回答
3
投票

您应该联系制造商。即使使用编程计算器并确保仅使用7位,校验和也会出现在0x68。我不完全确定你的计算是否正确,因为另一个评论可能不是7位。但是你提供的数字总和无论如何都是一个7位数,所以在你给它的例子中应该没关系。但它可能对其他数据很重要。但绝对联系公司,因为正确的校验和似乎确实是0x68。

© www.soinside.com 2019 - 2024. All rights reserved.