Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2021, 01:12   #131
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
По идее, это уже checksum16 получился. Вы там поправьте IntToHex, чтобы выводить 2 байта.
Нет BDA checksum 8 получается и только, в разных вариантах, что byte, что word без разницы всё ровно только checksum 8, а checksum 16 не получается. Я набросал специально отдельную и всё ровно не выходит. Что то с функцией не так.
Вложения
Тип файла: rar Checksum_8_test_.rar (176.5 Кб, 2 просмотров)
Тип файла: rar Тест -3- полный с контролеой.rar (217 байт, 3 просмотров)

Последний раз редактировалось sergey.serg-72; 22.11.2021 в 01:34.
sergey.serg-72 вне форума Ответить с цитированием
Старый 22.11.2021, 01:41   #132
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вы там поправьте IntToHex, чтобы выводить 2 байта.
С этим был не прав. Там задается минимальная длина числа, но не обрезает данные, если они есть.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Не пойму в чём трабла? то получалась 16 с этим кодом, теперь только 8, впал в зависание...
Какого типа переменная crc? С какими редакторами сравниваете сумму?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.11.2021, 01:59   #133
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Какого типа переменная crc? С какими редакторами сравниваете сумму?
Тритон редактор и он правильно считает, есть файлы с контролкой checksum8 и 16 и они совпадают с тритоном, в HxD не верно подсчитывают. Я на тритона ориентируюсь.
crc := Word; как и было. В тритоне Checksum_8 без байта исключения = 1950, с байтом исключения 1942 Checksum16 без байта исключения = 5DFF, с байтом исключения =0DAA , в данном случае интересует алгоритм тритона, так как по Checksum он совпадает с имеющимися прошивами и алгоритмами, а HxD не верно делает.
sergey.serg-72 вне форума Ответить с цитированием
Старый 22.11.2021, 02:04   #134
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию архив

архив фото
Изображения
Тип файла: jpg 1.JPG (47.3 Кб, 9 просмотров)
Тип файла: jpg 2.JPG (47.5 Кб, 9 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 22.11.2021, 02:47   #135
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Какого типа переменная crc? С какими редакторами сравниваете сумму?
Вот BDA, набросал , всё совпадает с редактором тритона и так надо и хотелось бы, а не как в HxD
Правда без функций и введения адреса и исключения байта.
Считает файл полностью и как надо. Попробуйте тестовый файл и будет нужная сумма., какая нужна. А HxD ерунду считает, это неправильно.

Вот различия:

A: array of byte; // 8

A: array of Word; // 16

A: array of longword; // 32
Вложения
Тип файла: rar Checksum_8_16_32_.rar (178.0 Кб, 1 просмотров)
Тип файла: rar Тест -3- полный с контролеой.rar (217 байт, 1 просмотров)

Последний раз редактировалось sergey.serg-72; 22.11.2021 в 02:52.
sergey.serg-72 вне форума Ответить с цитированием
Старый 22.11.2021, 04:08   #136
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А HxD ерунду считает, это неправильно.
Ну да, они меняют размер самой суммы (1, 2, 4 байта), но складывают побайтово во всех случаях.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
архив фото
Без байта исключения при sum-16 тритон захватывает и 0x69 при подсчете, а не только выделенные данные (т.к. в случае sum-16 можно обрабатывать только четное количество байтов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.11.2021, 04:20   #137
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Ну да, они меняют размер самой суммы (1, 2, 4 байта), но складывают побайтово во всех случаях.
Не совсем так, ведь сумма одного и того же файла меняется что при 8, что при 16, что при 32.
В первом варианте (8) по байтова считается 1 байт+ байт и так до конца.
Во втором случаи по 2 байта, к двум байтам прибавляются следующие два байта и так до конца.
В третьем случае по 4 байта берётся и прибавляется к следующим четырём и так до конца.
По этому и называются 8,16 и 32. так и должно быть пересчитал. присланные мне файлы , все правильно подсчитываются значит верный алгоритм. Вот такие алгоритмы и нужны к общей. с возможностью исключения 1. 2 байт и выбор адреса , всё , Как и на CRC.
У меня не получается ни как с исключением байт и выбор адреса, пытаюсь функцию придумать под 8.16 и 32 . не получается. А просто подсчитать целый файл получается.
sergey.serg-72 вне форума Ответить с цитированием
Старый 22.11.2021, 04:24   #138
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Без байта исключения при sum-16 тритон захватывает и 0x69 при подсчете, а не только выделенные данные (т.к. в случае sum-16 можно обрабатывать только четное количество байтов).
Не знаю как он захватывает, но считает он правильно, что с байтом , что без байта, считает правильно, как и должно быть, я проверил уже.
Вот такие алгоритмы и нужны, чтоб три функции бы и вообще классно !!!

Вот подправил.
Вложения
Тип файла: rar Checksum_8_16_32_.rar (178.1 Кб, 0 просмотров)
Тип файла: rar Тест -3- полный с контролеой.rar (217 байт, 0 просмотров)

Последний раз редактировалось sergey.serg-72; 22.11.2021 в 04:32.
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.11.2021, 03:07   #139
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

BDA, приветствую Вас ! сегодня посидел над Checksum, ввёл возможность подсчёта с выбора адреса, к примеру с 0 по $100 и.т.д всё отлично подсчитывает и быстро.
Не получается ни как сделать , к моему коду возможность исключать байт, или два, как в CRC мы делали. Что то не получается, сижу третий час, но пока не выходит. Может функцию надо писать, или можно без функции обойтись?
Всё отлично, но не хватает сделать исключение для байта, двух в коде.
Посмотрите код, подскажите, как байты исключения в код включить.

Код:
 var
A: array  of byte; // чтоб считало по два байта SUM-16 меняем byte на word
f: TFileStream;
D,crc,w: Word;
j, addr1, addr2, addr3,skip_,skip_2, buf_len:integer;
buffer: String;
begin
label1.Caption:=' ';
edit2.Clear;
edit4.Clear;
edit5.Clear;
OpenDialog1.Filter := 'BIN (*.bin)|*.bin';
with OpenDialog1 do
if Execute then
begin
F:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyNone);
if F.Size < 0  then
begin
ShowMessage('Не тот  файл  !');
F.Free;
exit;
end;
begin
edit5.Text:=ExtractFileName(OpenDialog1.FileName);
label2.Caption:= 'Size :'+' ' +IntToStr(f.Size)+ ' ' + ' '+'Byte';

addr3:= StrToIntDef('$' + Edit6.Text, -1); // конечный адрес
F.Position :=addr3;
F.Read(w, 2);
w := swap(w);
Edit4.Text:=' '+IntToHex(w,2);

skip_ := StrToIntDef('$' + Edit7.Text, -1);  // так можно и с 0 и с исключением байта
addr1 := Strtoint('$' + Edit1.Text); // начальный адрес
addr2 := Strtoint('$' + Edit3.Text); // конечный адрес
buf_len:= addr2 - addr1;

F.Position:= addr1;;
SetLength(A,  buf_len);
F.Read(A[1], buf_len);
for j:=0 to  buf_len do D:=D+A[j];
Edit2.Text:=' '+IntToHex(D,A[1]+D);
label1.Caption:='Checksum_8 ';
A:=nil;
end;
F.Free;
end;
end;
sergey.serg-72 вне форума Ответить с цитированием
Старый 23.11.2021, 03:42   #140
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
skip_ := skip_ - addr1;
buf_len := addr2 - addr1;
D := 0;

F.Position:= addr1;
SetLength(A, buf_len);
F.Read(A[0], buf_len);
for j := 0 to buf_len - 1 do
begin
  if j = skip_ then
    Continue;
  Inc(D, A[j]);
end;
Edit2.Text := IntToHex(D, 4);
Label1.Caption := 'Checksum_8';
A:=nil;
Это исправления некоторых проблем и исключение одного байта для SUM-8. Но с 16 так просто не получится.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Opendialog завис DimOn4Ik Общие вопросы Delphi 12 02.11.2018 16:08
Реализация суммы в простом варианте. Mariolka PHP 8 10.11.2016 15:50
С++ сортировка в текстовом файле. (Задание на курсовик никак не получается) Evg888 Помощь студентам 1 02.06.2012 19:37
Житейская задачка о простом копировании mephist Помощь студентам 11 16.05.2009 20:42