Javascript 2’;s补码校验和

Javascript 2’;s补码校验和,javascript,math,checksum,addition,Javascript,Math,Checksum,Addition,我正在尝试实现一个我无法重现的使用某种校验和计算的方法 该规范规定校验和应为“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

我正在尝试实现一个我无法重现的使用某种校验和计算的方法

该规范规定校验和应为“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'))

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

在计算2的补和时,我是不是误解了什么

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

分为:

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

你应该联系制造商。即使使用编程计算器并确保仅使用7位,校验和也会显示为0x68。我不完全确定你的计算是否正确,根据另一条评论,可能不是7位。但是您提供的数字的总和是一个7位的数字,所以在您给出的示例中,这并不重要。不过,这可能会影响其他数据。但一定要联系公司,因为正确的校验和似乎是0x68

我不知道,但为了帮助您得到答案,请澄清:您在代码中显示的两种方式都不起作用?不,两种方式都不起作用。您从哪里获得校验和应该为0x78的示例数据?你能提供一个参考吗?@ToddChaffee更新的问题我也不知道他们是如何到达0x78的,但请注意,上面写着7位。在某处添加
&0x7F