2014-11-11 8 views
0

Мне нужно вычислить контрольную сумму 1 байт более 15 байт. Моя первая идея заключалась в том, чтобы использовать что-то вроде crc8, но проблема в том, что я должен использовать действительно ограниченный интерпретатор BASIC, который поддерживает только базовые арифметические операции (+ - * /), но не побитовое «xor», «and» или «or», и никаких «сдвиговых» операций.Контрольная сумма без логических/побитовых операций

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

+0

Для того, что стоит, несколько устаревших систем, с которыми я работал с ними, имели ограничения в строках, которые вы описываете, действительно использовали байты младшего порядка простой суммы значений в качестве их контрольной суммы. Я полагаю, что само это слово могло быть получено из этого использования :) –

ответ

2
LET a = 1 
LET b = 0 
FOR n = 1 to 15 
    LET a = a + c(n) 
    LET b = b + a 
NEXT n 
LET b = mod(b, 251) 

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

2

Если у вас есть усеченное целочисленное деление, вы можете определить mod (a, b) = a - (a/b) * b, что в значительной степени необходимо для http://en.wikipedia.org/wiki/Adler-32.

+3

Вот что я хотел бы использовать. :-) –

+0

@MarkAdler: Да, но вы, вероятно, смещены;) –

+0

Виновен как заряженный. –

 Смежные вопросы

  • Нет связанных вопросов^_^