我正在尝试实现一个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的补码和时是否误解了?
该示例取自成功执行的命令,该命令在制造商提供的控制台窗口中可见。
分解为:
SOM 10 02
CMD 04 (CONNECTED)
DATA 00 10 10 18 57
BTC 05
CHK 78
EOM 10 03
答案 0 :(得分:3)
您应该与制造商联系。即使使用编程计算器并确保仅使用7位,校验和仍为0x68。我不能完全确定您的计算是否正确(根据其他评论),可能不是7位。但是无论如何,您提供的数字总和是7位数字,因此在示例中给出的数字无关紧要。不过,这对于其他数据可能很重要。但一定要联系公司,因为正确的校验和似乎为0x68。