Шестнадцатеричный расчет для контрольной суммы - PullRequest
1 голос
/ 01 сентября 2011

Я не понимаю, как этот результат может быть нулем. Это был представлен мне пример проверки контрольной суммы сообщения.

ED(12+01+ED=0)

Как этот результат может быть нулем?

"1201 - это сообщение" ED - это контрольная сумма, у меня вопрос больше, как я могу определить контрольную сумму?

Спасибо за любую помощь.

С наилучшими пожеланиями, FR

Ответы [ 3 ]

7 голосов
/ 01 сентября 2011

Как этот результат может быть нулем?

Контрольная сумма предположительно представлена ​​ байтом .

Байт может хранить 256 различных значений, поэтому вычисление, вероятно, выполнено Модуль 256 .

Поскольку 0x12 + 0x01 + 0xED = 256, результат становится равным 0.

как определить контрольную сумму?

Контрольная сумма - это конкретное значение байта B, которое составляет сумму байтов в сообщении + B = 0 (по модулю 256).

Итак, как говорит @LanceH в комментарии, чтобы выяснить контрольную сумму B, вы ...

  1. сложить значения байтов в сообщении (скажем, это добавляет до M)
  2. вычислить M' = M % 256
  3. Теперь контрольная сумма B вычисляется как 256 - M'.
2 голосов
/ 01 сентября 2011

Я не уверен в деталях вашей контрольной суммы, но в арифметике с основанием 16 (и в базе 10):

 base-16       base-10
-----------------------
   12            18
   01             1
+  ED           237
------------------------
  100           256

Если ваша контрольная сумма равна модулю 256 (16 ^ 2), вы толькооставьте 2 последние 16 цифр, так что вы получите 00

0 голосов
/ 01 сентября 2011

Ну, очевидно, когда вы складываете 12 + 01 + ED, результат переполняется на 1 байт, и это фактически шестнадцатеричное число 100. Так что, если вы берете только последний байт 0x0100.вы получаете 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...