Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172

Рассчитать контрольную сумму файла CRC-32

07.09.2021, 00:08. Показов 7535. Ответов 25

Студворк — интернет-сервис помощи студентам
Всем привет.
Помогите пожалуйста кодом рассчитать контрольную сумму файла CRC-32, в конце надо добавить еще 1 байт (у меня в виде строки 02), т.к. значение часто меняется надо чтобы в Edit1 было это значение.
Хотелось бы чтобы кнопкой "Открыть файл" выбирался файл, в конце к нему добавлялся байт с Edit1 и контрольная сумма рассчитывалась в Edit2
Правильно сумму показывает сайт https://hash.online-convert.com/ru/crc32-generator - HEX: DA84C3C2
У меня установлена Delphi 10.3

Пример файла: 1.zip



0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2021, 00:08
Ответы с готовыми решениями:

Необходимо найти контрольную сумму CRC-16 некого сообщения
Здравия. Необходимо найти контрольную сумму CRC-16 некого сообщения. На сколько я понял, алгоритм такой - есть некое сообщение в Memo,...

Как получить контрольную сумму CRC-8?
Здравствуйте, не могу получить контрольную сумму. Имеется готовый рабочий пример: A5 01 10 55 03 02 36 85 D2 При отправке этого...

Рассчитать контрольную сумму
Приветствую друзья, помогите пожалуйста понять как посчитать контрольную сумму 00 D7 28 00 00 86 81 1F 00 0A 20 AE Последний байт я так...

25
08.09.2021, 11:54
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от Myrus Посмотреть сообщение
Уж простите в 50 заниматься изучением языка уже поздно и нет просто времени.
Мне 51. В 49 я изучил С++ (и пишу на нем), сейчас изучаю Python. Так что не нужно прибедняться. Делфи я изучал в молодости, это можно не считать.

0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
09.09.2021, 01:13  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Var
  Stream: TMemoryStream;
  crc: DWORD;
begin
  Stream := TMemoryStream.Create;
   try
    Stream.LoadFromFile('1.bin');
    Stream.Position := 0;
    crc := crc32(Stream, Stream.Size);
    Edit1.text := inttohex(crc, 8);
  finally
  Stream.Free;
end;
end;
Явно что-то не то нарисовал.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
09.09.2021, 02:42
Цитата Сообщение от Myrus Посмотреть сообщение
Явно что-то не то нарисовал.
Насколько я помню, TMemoryStream как указатель не работает.
Т.е., данные нужно читать процедурой ReadBuffer.
Функцию CRC32 нужно немного доработать.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
function CRC32(const pStream: TStream): DWORD;
var
  B: Byte;
begin
  Result:= $FFFFFFFF;
  pStream.Position:=0;
  while pStream.Position<pStream.Size do
    begin
        pStream.ReadBuffer(B,1);
        Result := (Result shr 8) xor CRC32TABLE[B xor (Result and $000000FF)];
    end;
  Result:= not Result;
end;
Писал прямо в редакторе, без отладки.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
09.09.2021, 02:49
Цитата Сообщение от Myrus Посмотреть сообщение
Явно что-то не то нарисовал.
Угу. Попробуйте
Delphi
1
crc := crc32(Stream.Memory, Stream.Size);
P.S.
И всё же я не понимаю кому и для чего нужно узнать/вычислить CRC для файла?
Алгоритм CRC (Cyclic redundancy check) разработан для отлова ошибок при передачи информации по последовательному порту.
А если нужно знать "контрольную сумму" файла для проверки его на то, что это "тот самый файл" пока ничего лучшего чем MD5 не придумано.
А CRC ну очень упрощённый алгоритм по сравнению с MD5.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
09.09.2021, 03:36
Цитата Сообщение от Myrus Посмотреть сообщение
Явно что-то не то нарисовал.
(Удалил. Это уже написано выше).

И тот дополнительный байт как-то добавить надо.
0
0 / 0 / 0
Регистрация: 27.03.2015
Сообщений: 172
09.09.2021, 11:14  [ТС]
Внес изменения как подсказал уважаемый Constcat.
Контролька при обычном результате рассчитывается верно B0 57 35 CC



Сверил с тем калькулятором в начале темы и не совпала она, давай искать другой калькулятор. И как оказалось в нем убирая галочки с "Реверс байтов сообщения" и "Реверс CRC перед финальным XOR" получаю правильный результат 9B 74 E0 0F.



Свои потуги прикрепляю: CRC.zip
Помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.09.2021, 11:14

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

Проверка файла на контрольную сумму MD5
возникла такая мысль как сделать так, чтобы получить md5 указанного файла? к примеру я хочу сделать так if(md5(files.exe) ==...

Как проверить контрольную сумму файла?
Доброго времени суток Подскажите пожалуйста, как можно проверить контрольную сумму файла? sha1 или sha2

Как найти контрольную сумму файла?
На вход программы подается файл, как найти контрольную сумму файла?

Как посчитать контрольную сумму файла?
Как посчитать контрольную сумму файла по алгоритму 41*hash0*byte, я попытался сделать, но не знаю так ли это #include &lt;stdio.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru