Как вычислить наименее значащий байт в Ruby - PullRequest
0 голосов
/ 04 апреля 2010

Я отправляю байтовый массив на аппаратную часть.

Первые 7 байтов содержат данные, а восьмой байт является контрольной суммой.

8-й байт является наименее значимым байтом суммы первых 7 байт.

Примеры, содержащие правильную контрольную сумму. Последний байт каждого из них - контрольная сумма

200-30-7-5-1-2-0-245

42-0-0-1-176-0-148-39

42-0-0-3-177-0-201-118

Как рассчитать контрольную сумму?

Спасибо, Сет

Ответы [ 3 ]

1 голос
/ 04 апреля 2010

Строковые объекты имеют ряд методов для прямой манипуляции байтами.

1 голос
/ 04 апреля 2010

Короткий способ написать это будет

arr.inject { |sum, val| sum += val } & 0xFF

Но, как было обнаружено ранее, это создает другую контрольную сумму для вашего второго и третьего примеров.Похоже, что либо примеры неверны, либо вычисление контрольной суммы не так просто, как взятие младшего значащего байта.

1 голос
/ 04 апреля 2010

То же, что и в C: взять сумму и «побитовое значение» с 255 (или 0xff в шестнадцатеричном формате). Используя ваш первый набор данных в качестве примера:

arr = [ 200, 30, 7, 5, 1, 2, 0 ]

sum = 0
arr.each do |val|
    sum += val
end
checksum = sum & 0xff

print checksum
...