LINUX.ORG.RU
ФорумTalks

Контрольная сумма


0

0

Определяется как двоичное дополнение младших семи битов двоичное суммы всех символов строки!
Объясните!
Я понял так!
Нужно сложить все элементы строки, допустим получилась сумма 76543210.
Двоичное дополнение нужно делать к 6543210?
!?

★★★★★
Ответ на: комментарий от anonymous_incognito

Строка состоит из 18 символов, где последний символ контрольной суммы!
Контрольная сумма определяется как двоичное дополнение младших семи битов двоичной суммы всех символов строки, предшествующих символу контрольной суммы!

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

По-моему, понятно. Надо "поксорить" семнадцать байт (символов), а затем из числа 128 вычесть число, образованное семью битами результата операции двоичного суммирования (xor). Семь битов можно получить, произведя двоичное суммирование с числом 128.

То есть, твоя контрольная сумма это s[17]=128-(128^s[1]^s[2]^...s[17]);

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Не совсем так:
sum[17]=128-(127&s[1]^s[2]^...s[17]);
-------------^^^^--------------------
или просто:
sum[17]=!(127&s[1]^s[2]^...s[17]);

xor со 128, если у тебя в старшем разряде был 0 даст 1.

dn2010 ★★★★★
()
Ответ на: комментарий от dn2010

> xor со 128, если у тебя в старшем разряде был 0 даст 1.

Да, ошибся чего-то :)

anonymous_incognito ★★★★★
()
Ответ на: комментарий от popov_da

> Зю! Это правильно!

А вот и нет! Меня поправили, но у меня ещё одна ошибка есть ;-)

s[17]=!(127&s[0]^s[1]^...s[16]);

Вот так правильно (счёт от 0 до 16, а не с 1 до 17 и присваивание 17 -ому элементу)

anonymous_incognito ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.