Size: a a a

2020 May 23

А

Алексей in Delphi & Lazarus
Ни на Делфи, ни на асеме, ни на ++, ни на шарпе, ни на паскале
источник

А

Алексей in Delphi & Lazarus
Самое адекватное, это вот то видео на Ютубе, которое и ты кинул и я тоже несколько раз посмотрел) но с точки зрения кода, я таких алгоритмов не нашел
источник

А

Алексей in Delphi & Lazarus
Вот тут есть пример более менее понятный, но это вроде вообще не crc https://www.programmersforum.ru/showthread.php?t=149914
источник

DB

Dmitry Belkevich in Delphi & Lazarus
источник

DB

Dmitry Belkevich in Delphi & Lazarus
вот паскалевские реализации
источник

DB

Dmitry Belkevich in Delphi & Lazarus
там в общем пара действий
источник

DB

Dmitry Belkevich in Delphi & Lazarus
function UpdateCrc16(Value: Byte; Crc16: Word): Word;inline;
begin
 Result := ((Crc16 shr 8) and $00FF) xor
   crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)];
end;


function Crc16(const Value: AnsiString): Word;inline;
var
 n: Integer;
begin
 Result := $FFFF;
 for n := 1 to Length(Value) do
   Result := UpdateCrc16(Ord(Value[n]), Result);
end;
источник

DB

Dmitry Belkevich in Delphi & Lazarus
весь алгоритм, что тут не ясно? :)
источник

DB

Dmitry Belkevich in Delphi & Lazarus
можешь вместо строки передать массив байт и ord() убрать
источник

DB

Dmitry Belkevich in Delphi & Lazarus
будет работать для любого файла и любых данных
источник

DB

Dmitry Belkevich in Delphi & Lazarus
как файл в tbytes вычитать тоже за тебя поискать? )
источник

А

Алексей in Delphi & Lazarus
Dmitry Belkevich
весь алгоритм, что тут не ясно? :)
1) почему в result $ffff
2) value это что за строка? Путь к файлу или ещё что-то?
3) получается мы далее передаём по байтово в функцию updatecrc16
4) в результ мы дописываем  нули и с какой то непонятной штукой сравниваем в которую тоже дописываем нули
источник

А

Алексей in Delphi & Lazarus
Dmitry Belkevich
как файл в tbytes вычитать тоже за тебя поискать? )
Ни в коем случае, я прошу просто подсказать как работает алгоритм, ТК самостоятельно за 4 дня ничего особо не понял
источник

А

Алексей in Delphi & Lazarus
Алексей
1) почему в result $ffff
2) value это что за строка? Путь к файлу или ещё что-то?
3) получается мы далее передаём по байтово в функцию updatecrc16
4) в результ мы дописываем  нули и с какой то непонятной штукой сравниваем в которую тоже дописываем нули
Тк результ это полином по он по идее потом тк не константа, поменяет значение
источник

А

Алексей in Delphi & Lazarus
И про таблицу всё-таки тогда не понимаю, для чего она
источник

SB

Sergey Bodrov in Delphi & Lazarus
Алексей
Здравствуйте, может кто-то подсказать по crc алгоритмам? Прочитал и прогуглил несколько десятков всяких статьей и материалов, но так и не понял, почему в одних написано про таблицы, в других этому всё считается делением на полином, в третьих ещё какой то непонятный набор символов. Одни добавляют нули в конец, другие в начало, третьи инвертируют исходные данные, четвертые их отзеркаливают.
Алгоритмов CRC много, самый правильный CRC32. Есть некоторый общий принцип расчета, описан в Википедии. Меняются константы (полином, начальное и конечное значение, обратный порядок). Таблицы нужны для ускорения, чтобы заранее рассчитать повторяющиеся значения.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Принцип в том, чтобы начальное значение складывать с полиномом, полученным из очередного байта данных.
источник

SB

Sergey Bodrov in Delphi & Lazarus
То есть каждый следующий байт будет менять текущее значение crc
источник

А

Алексей in Delphi & Lazarus
Sergey Bodrov
Алгоритмов CRC много, самый правильный CRC32. Есть некоторый общий принцип расчета, описан в Википедии. Меняются константы (полином, начальное и конечное значение, обратный порядок). Таблицы нужны для ускорения, чтобы заранее рассчитать повторяющиеся значения.
Вот про начальные знания тоже не очень понятно, они в статьях встречаются через раз и для чего они, обычно не сказано. Не очень понимаю, как таблицы помогают рассчитать повторяющиеся значения. Это повторяющиеся в каком то конкретном примере или для полинома в целом?
источник

А

Алексей in Delphi & Lazarus
Sergey Bodrov
Принцип в том, чтобы начальное значение складывать с полиномом, полученным из очередного байта данных.
Мне, опираясь на Вики, казалось что полином, это устойчивое значение, на которое делят исходное
источник