![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#41 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Это не перескок. Например, вы прочли в книге 2ю и 3ю страницу. А всего прочли 2 страницы (3 - 2 + 1). На адресе 5E в файле начинается уже контрольная сумма, а не сами данные для расчета.
Можно изменить только "skip_ := StrToIntDef('$' + Edit1.Text, -1);".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#42 |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]()
Ну . если оставить +1. то неправильно считает. или оставить +1. тогда результат неверный. Как быть ?
|
![]() |
![]() |
![]() |
#43 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#44 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]()
В процедуре. за место skip_ := Strtoint('$' + Edit1.Text); . если да. то при пустом едите результат неверный.
Цитата:
да . это так. но если оставить +1 то результат неверный выходит. редактор не даст соврать. Как быть? Ясно одно. если оставить так: buf_len := addr2 - addr1+1; то результат неверно подсчитывается. если так buf_len := addr2 - addr1; то результат правильный Можно так : buf_len := addr2 - addr1+0; тоже результат правильный можно его. как нейтральный. Последний раз редактировалось BDA; 14.11.2021 в 04:20. |
|
![]() |
![]() |
![]() |
#45 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Так вы попробовали в первый эдит 2B, в третий эдит 0, а в шестой эдит 5D вместе с "buf_len := addr2 - addr1 +1;"?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#46 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
На этом варианте и остановимся. огромное Вам спасибо за помощь . это бесценные уроки что Вы даёте. препод всё же не умеет до всех донести наглядно и понятно. Огромное ещё раз спасибо !!! |
|
![]() |
![]() |
![]() |
#47 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]()
BDA, я сейчас таблицу изучаю, на которую Вы, дали ссылку :
https://ru.wikipedia.org/wiki/Циклич...0%BE%D0%B2_CRC У меня вопрос по таблице, если Вас не затруднит. Между CRC16CCIT и CRC16XMODEM как мы знаем разница в Result := 0; или Result := $FFFF; разница в Result, из таблицы следует определяет init, Poly =0x1021 у обоих одинаковыый. как я понимаю отвечает за это. строка Result := (Result shl 1) xor $1021 в связи с чем вопрос 1) Как я подсчитал CRC16 насчитывает 21 исполнение. ? 2) можно ли использовать нашу функцию для каждого варианта, естественно с изменениями? 3)Или для каждой надо свлю функцию писать? 2) в чём разница между скажем CRC16CCITT и CRC-16/ARC. или CRC-16/CDMA2000 ? Как я понимаю надо изменять в функции Result := (Result shl 1) xor $1021 на Result := (Result shl 1) xor $1021C867 ? Если Вам не трудно объясните на примере пожалуйста, а то для меня это новое, изучаю, но ещё не до конца понял различия и реализации. Спасибо ! Цитата:
Код:
А вот это функция для CRC-16/CCITT Код:
Последний раз редактировалось BDA; 19.11.2021 в 18:49. |
|
![]() |
![]() |
![]() |
#48 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
В таблице 23 алгоритма CRC16 (CRC-A тоже имеет степень 16). И это не исполнение - из всего множества наборов параметров, нескольким наборам дали свои имена. Исходя из заданных этой методикой параметров, всего алгоритмов степени 16 может быть 2 в 50 степени.
Цитата:
Если не гнаться за производительностью, то добавив дополнительные проверки, можно поддерживать любой вариант. Не всё так просто. CCITT от CDMA2000 отличался только параметрами Init и Poly (которые вы меняете в двух строках кода). Но ARC отличается от CCITT еще и параметрами RefIn и RefOut, которые тоже нужно как-то учесть при подсчете. Чтобы самому проверить правильность реализации алгоритма, просто считайте контрольную сумму строки "123456789" и сравнивайте со столбцом Check в таблице на Википедии.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
|
![]() |
![]() |
![]() |
#49 | ||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
А тоя смотрю что названия разные, а сумму сходится и подумал, а зачем дублировать, одно и тоже и при этом давать разные названия? Значит выложенные мной функции, в корне не правильны. Значит не усвоил урок. Вот универсальный вариант и хотел реализовать по таблице, но оказывается что я не неправильно понял. А уже размечтался что удивлю препода универсальной... Разлетелся Икар.. Цитата:
) А можно на примере, если не затруднит Вас ? Это был бы интересный момент ,сделать универсальную на все 23 варианта. А то я то разлетелся, думал удивлю, но пролетел как фанера, над Парижем.... Жалко что кроме таблице не дают наглядных примеров как , где и что дополнять и изменять. Последний раз редактировалось BDA; 15.11.2021 в 07:04. |
||
![]() |
![]() |
![]() |
#50 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Кстати говоря, в статье на Википедии на немецком есть примеры на паскале (статья).
Для лучшего понимания прочтите статью Элементарное руководство по CRC-алгоритмам обнаружения ошибок. Бегло ее просмотрел - достаточно познавательно. Я немного "загнул" с оценкой общего количества вариантов, так как не любой полином одинаково полезен. Крайне неэффективный подход с переворотом каждого байта, но совпал со столбцом Check: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |