int count = 9;
int sum = data[0];
for (int i = 1; i < count - 1; i++)
{
sum ^= data;
}
data[count - 1] = ~sum;
Инверсное побитовое суммирование байт посылки
Не подскажет ли многоуважаемый олл, решение следующей проблемы. Необходимо сформировать посылку не более 9 байт (массив char'ов), содержащий команду внешнего устройства. Последний байт посылки должен содержать контрольную сумму, которая является "инверсным значением результата побитного суммирования всех байт посылки" (цитата из спецификации заказчика). Проблема в том, как определить эту контрольную сумму.
Заранее благодарен.
Обыкновенная чек сумма только инфертированная.
Для проверки. Инвертируешь последнее число. Суммируешь все 9 байт если 0 то чек сумма правельная.
Для рассчета чек контрольной суммы. Считаем сумму 8 байт потом из 0 (256) вычитаем полученную сумму и инвертируем.
Инвертированное число - в котором обратный порядок бит.
Код:
По крайней мере, этот код в точности соответствует формулировке задания, если под "побитовой суммой" подразумевалось "сложение по модулю 2".