Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > CRC-8 массива байт


Автор: wofs 11.6.2011, 23:08
Доброго дня.
Есть массив байт пусть будет vbyte размер достаточно большой (~4Мб).
Требуется вычислить CRC-8 checksum-8 этого массива.
Нашел в википедии описание алгоритма и пример на Си, но в Си я нуб, а описание никак в мозгу не обыграю чтоб в функцию вылить...
Помогите функцией плиз.

Автор: northener 12.6.2011, 01:12
Цитата(wofs @  11.6.2011,  23:08 Найти цитируемый пост)
Требуется вычислить CRC-8

Зачем требуется?
Строгого стандарта CRC не существует. Есть только некий общий принцип.

Автор: wofs 12.6.2011, 12:40
Цитата(northener @ 12.6.2011,  01:12)
Зачем требуется?
Строгого стандарта CRC не существует. Есть только некий общий принцип.

Требуется для того, что бы вернуть изначальную CRC измененному файлу.
Ядро в файле перед запуском считывает CRC по алгоритму CheckSum8 и если она не равна той, что заложена в нем, то запуска не происходит.
Алгоритм полностью совпадает с тем, который использует для подсчета CheckSum8 редактор http://mh-nexus.de/en/hxd/

Автор: AKATAN 12.6.2011, 23:49
Код

Program chksum8;
{$APPTYPE CONSOLE}

function CheckSum8(s: string): byte;
var i, b, k: byte;
begin
  b:=0;
  for i:=1 to Length(S) do b:=b + ord(s[i]);
  for i:=0 to 255 do
  begin
    k:=b + i;
    if k = $40 then break;
  end;
  result:=i;
end;

begin
  writeln(chr(CheckSum8('Z5IGBFAZ900105Y'))); // v
end.

3-я ссылка найденная гуглом...

Автор: northener 13.6.2011, 02:31
Цитата(wofs @  12.6.2011,  12:40 Найти цитируемый пост)
Ядро в файле перед запуском считывает CRC по алгоритму CheckSum8 и если она не равна той, что заложена в нем, то запуска не происходит.
Алгоритм полностью совпадает с тем, который использует для подсчета CheckSum8 редактор http://mh-nexus.de/en/hxd/ 

Ну, как бы, CRC8 это не CheckSum8. А CheckSum8, в свою очередь, вовсе не относится к алгоритмам CRC (Circular Redundancy Check).
Кстати алгоритмов CheckSum тоже не мало. Удачи в поисках!

Автор: wofs 13.6.2011, 15:55
всем спасибо, я действительно думал про одно, спросил про другое!

AKATAN
Цитата

3-я ссылка найденная гуглом...

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

Нашел описание алгоритма.
Код

Checksum-X(file) = Sum_of_all_bytes(file) mod 2^X

написал функцию по описанию - работает. всем спасибо за обсуждение!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)