Идея состоит в том, что вам нужно придумать CHKSUM
такой, чтобы LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
имел 0 в младшем значащем байте.Итак, давайте сделаем суммирование в 8 битах (или по модулю 256):
LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
= 0
CHKSUM
= - (LENH
+ LENL
+ OPCODE
+ PARAM
)
IOW, CHKSUM
= - (0 + 2 + 1 + 0) = -3 = 0xFD.(Помните, что все это было сделано в 8 битах).
Вы можете проверить, что CHKSUM
удовлетворяет требованию (теперь вы делаете все в 16 битах):
0 + 2+ 1 + 0 + 0xFD = 0x100
И это имеет 0 в младшем байте.Если бы мы делали это и в 8 битах, мы бы получили 0 вместо 0x100, и это также было бы правильным способом проверки правильности.