Автор: cheops (24.03.2012 в 15:08)
Давайте разбираться, возьмем для примера первую строку
LL AAAA TT DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD CC
10 0100 00 214601360121470136007EFE09D21901 40 |
LL везде равно 10, или переводя из шестнадцатиразрядной системы исчисления в десятичную 16 байт или 32 позициям в записи (4 бита на позицию), в самом деле если посчитать предпоследний фрагмент получается 32 значения.
Адрес AAAA принимает значения (так же переводим в десятичную систему)
0100 равно 256
0110 равно 272
0120 равно 288
0130 равно 304
|
В самом деле адреса идут с интервалом 16 байт, ну вроде что-то проясняется. 32 циферки затем (а это значение мы выяснили из LL) это данные, как раз остается две цифры CC – контрольная сумма. Суммируем все пары чисел (это шестнадцатеричные числа, если хотите можете перевести их в десятичный формат, только не забудьте потом перевести результат в шестнадцатеричный формат)
10 + 01 + 00 + 00 + 21 + 46 + 01 + 36 + 01 + 21 + 47 + 01 + 36 + 00 + 7E + FE + 09 + D2 + 19 + 01 = 3С0 |
По модулю, это означает, что все что вылазит за пределы 8 бит, две позиции – отбрасываем, остается C0 (в С++ будет вообще просто, нужно будет только подходящий тип данных выбрать). Складываем с контрольной суммой получаем C0 + 40 = 100, что по модулю опять дает 00. Что и требовалось доказать – контрольная сумма в порядке.