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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2021, 04:47   #101
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,323
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Компилируется но результат стал неверным . где то ошибка ?
В приведенных кусках кода ничего подозрительного не вижу. Может быть, вы вводите данные не в те эдиты, поэтому ожидания не совпадают с результатом. В старом коде вы использовали edit2 для вывода контрольной суммы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 18.11.2021, 06:41   #102
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
В приведенных кусках кода ничего подозрительного не вижу. Может быть, вы вводите данные не в те эдиты, поэтому ожидания не совпадают с результатом. В старом коде вы использовали edit2 для вывода контрольной суммы.
BDA . Вы как всегда правы !!!. это моя усталость сказывается., глаз замылился...
Всё корректно . в моём коде , всё делает отлично, я адрес неправильно вводил. за место 2В. вводил 2С . отсюдо и не тот едит . вот и неверный вывод был. Разобрался, всё отлично теперь.

Это самый оптимальный вариант, или есть ещё проще варианты?

Последний раз редактировалось sergey.serg-72; 18.11.2021 в 06:44.
sergey.serg-72 вне форума Ответить с цитированием
Старый 18.11.2021, 07:25   #103
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
В приведенных кусках кода ничего подозрительного не вижу. Может быть, вы вводите данные не в те эдиты, поэтому ожидания не совпадают с результатом. В старом коде вы использовали edit2 для вывода контрольной суммы.
Вот тестовая. все размеры файла поставил, прогоните пожалуйста BDA. вроде всё корректно и правильно.
Вложения
Тип файла: rar CRC16 Xmodem-.rar (176.8 Кб, 2 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 18.11.2021, 22:33   #104
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

BDA приветствую Вас ! у меня вопрос сейчас появился. а для CRC32 универсальная функция и revers, как я понимаю не подойдёт. нужна новая функция ?
sergey.serg-72 вне форума Ответить с цитированием
Старый 18.11.2021, 23:35   #105
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,323
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Это самый оптимальный вариант, или есть ещё проще варианты?
Да, вроде, проще не приходит на ум. Хотя если захочется пропускать еще больше байтов (в случайных местах), то нужно будет что-то новое придумывать, а не добавлять новые и новые параметры. Или задавать как диапазон (двумя адресами) для расчета контрольной суммы, так и диапазон (двумя адресами) для исключения из расчета, например, для исключения 4байтовой контрольной суммы из середины.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
нужна новая функция ?
Скорее не новая, а небольшое изменение старых. Заменить типы Word на LongWord, поменять константы 16 на 32, расширить маски.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.11.2021, 04:16   #106
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Да, вроде, проще не приходит на ум. Хотя если захочется пропускать еще больше байтов (в случайных местах), то нужно будет что-то новое придумывать, а не добавлять новые и новые параметры. Или задавать как диапазон (двумя адресами) для расчета контрольной суммы, так и диапазон (двумя адресами) для исключения из расчета, например, для исключения 4байтовой контрольной суммы из середины.
А что бывает 4 байтовая контрольная сумма, да ещё в середине файла?
Если так, то да, что то надо с диапазоном думать.
sergey.serg-72 вне форума Ответить с цитированием
Старый 19.11.2021, 04:20   #107
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Скорее не новая, а небольшое изменение старых. Заменить типы Word на LongWord, поменять константы 16 на 32, расширить маски.
Как я понимаю менять не в универсальной функции и в функции revers, или там тоже надо дополнять ?
Сейчас попробую. Провозился с программой, не выводила контролку на CRC8, виновница swap была и заменил word, на byte для CRC 8, провозился много по времени, сейчас 32 попробую.
sergey.serg-72 вне форума Ответить с цитированием
Старый 19.11.2021, 04:26   #108
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,323
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
А что бывает 4 байтовая контрольная сумма, да ещё в середине файла?
CRC32, например, 4байтовая. А бывает или нет в середине файла - без понятия.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
или там тоже надо дополнять ?
И там и там.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.11.2021, 04:39   #109
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
И там и там.
Код:
function reverse(f: Word): Word;
begin
  f := ((f shr 1) and $5555) or ((f and $5555) shl 1);
  f := ((f shr 2) and $3333) or ((f and $3333) shl 2);
  f := ((f shr 4) and $0F0F) or ((f and $0F0F) shl 4);
  f := (f shr 8) or (f shl 8);
  Result := f;
end;

/////////////////////////////////////////////////////////

function CRCN(P: PChar; Len: LongWord; skip_, skip_2 : Integer; N, Poly, Init, XorOut: Word; RefIn, RefOut: Boolean): LongWord;
var
  i, j : Integer;
begin
  Result := Init shl (16 - N);
  Poly := Poly shl (16 - N);
  for i := 0 to Len - 1 do

  begin
    if i = skip_ then
          Continue;

    if i = skip_2 then

    Continue;

if RefIn then
      Result := Result xor reverse(ord(P[i]))
    else
      Result := Result xor (ord(P[i]) shl 8);
    for j := 0 to 7 do
    begin
      if (Result and $80000000) <> 0 then
        Result := (Result shl 1) xor Poly
      else
        Result := Result shl 1;
    end;
  end;
  Result := Result shr (16 - N);
  if RefOut then
    Result := reverse(Result) shr (16 - N);
  Result := Result xor XorOut;
end;




 function CRC32(P: PChar; Len:LongWord; skip_,skip_2 : integer): LongWord;
begin
  Result := CRCN(P, Len, skip_ , skip_2, 32,  $4C11DB7, $FFFFFFFF, $FFFFFFFF, true, true);
end;
что то в ошибку уходит, а в revers, тоже маски надо менять?
получается, что для 32 отдельные функции нужны?
sergey.serg-72 вне форума Ответить с цитированием
Старый 19.11.2021, 05:01   #110
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,323
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
отдельные функции нужны?
Отдельные в каком смысле? Если верно поправить CRCN и reverse, то можно будет использовать длину от 1 до 32.
Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
в revers, тоже маски надо менять?
Да, их надо дополнить. И добавить еще один шаг по обмену битами. В CRCN тип Len можно было не менять. А вот типы параметров (полинома, начального значения, XorOut) алгоритма надо было менять. 16 на 32 заменить, а 8 на 24.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
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