Я пытаюсь реализовать протокол , который использует вычисление определенной контрольной суммы, которую я не могу воспроизвести.
В спецификации сказано, что контрольная сумма должна быть "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