![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#81 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
Сдвиги зависят от длины, вот я и хочу разобраться, от чего зависит разная длина и какая она должна быть на 8,10,12,14 CRC, как её вычислять ? |
|
![]() |
![]() |
![]() |
#82 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Был, сразу после вашего сообщения с CRC8.
Так длина дана в таблице (столбец Width). И это число является степенью порождающего контрольную сумму многочлена. А вот необходимые сдвиги уже зависят от длины.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#83 |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() |
![]() |
![]() |
![]() |
#84 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Хотя, похоже, можно не мучиться со смещениями внутри цикла, а сделать необходимые смещения до и после него:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#85 | ||||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
далее, является степенью порождающего контрольную сумму многочлена. то есть контрольная сумма в один бай. или в два? Сдвиги от длины.......CRC8 длина.8. контролка один байт =9 байт Сдвиги есть в лево. в право так ведь? shl, shr Цитата:
Цитата:
Вот сравнил и вот отличия : Result := Result xor (ord(P[i]) shl 7); сдвиг в лево для 15 Result := Result xor (reverse(ord(P[i])) shr 8) логический сдвиг вправо 8 Но не как не дойду бестолковкой. сдвиг в право на 8 в одном. во втором сдвиг влево на 7. почему? Цитата:
Это универсальная функция для всех CRC. заместо reverse ? Последний раз редактировалось BDA; 17.11.2021 в 19:53. |
||||
![]() |
![]() |
![]() |
#86 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Длина контрольной суммы в битах совпадает с Width.
Да. Не могу сказать, что внутри цикла - просто, а снаружи - сложно. Вы сравниваете разные ветки выполнения по флагу RefIn в двух функциях, а не одну ветку. Чтобы не сравнивать самому построчно, воспользуйтесь, например, программой Meld, которая подсветит различия. Основной смысл сдвигов внутри цикла, это расценивать переменную result как width-битовое число, а новые биты из потока данных надо класть в самые старшие биты result. Да, универсальная (от CRC-1 до CRC-16, но проверял только на нескольких алгоритмах и строке 123456789). Нет, reverse всё также нужна. Еще одно замечание. Я с темой реализации CRC сталкиваюсь впервые (до начала данной темы на форуме не задумывался, как именно оно там считает) и могу ошибаться. Так что единственным мерилом верности выводов является совпадение контрольной суммы с чужими реализациями.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 17.11.2021 в 20:25. |
![]() |
![]() |
![]() |
#87 |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]()
BDA здравствуйте ! сегодня препод офигел слегка от старого кода и от того. на сколько я продвинулся. сказал что у репетитора вашего знаний больше чем у него самого. Но хоть честно признался сегодня. что объяснять не умеет ... По принципу провёл урок и всё. дальше сами..
Лёд тронулся. я об этом второй год преподу говорю. что донести и объяснять не умеет совсем. от того и группа в отстающих и интереса нет у ребят к данному предмету. Сегодня, наконец услышал нас....... BDA . Вы пока, не оставляйте тему. пока не разберусь до конца. Что то меня зацепило конкретно..... И так продолжим ! по теме : (Длина контрольной суммы в битах совпадает с Width.) берём пример CRC8 - - Width (длина) контрольная сумма 0xF4 1-байт - 8 бит С этим понятно значит длина для CRC8 это 8 бит Result := Result xor (reverse(ord(P[i])) shr 8) тогда почему в цикле for j := 0 to 7 do семь почему? для CRC16 for j := 0 to 8 do Сейчас посмотрел и мне кажется Вы правы. Последний раз редактировалось BDA; 17.11.2021 в 21:23. |
![]() |
![]() |
![]() |
#88 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]() Цитата:
В CRC16 также цикл "for j := 0 to 7 do". Потому что берется один байт (8 бит) из потока и прокручивается через XOR.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
|
![]() |
![]() |
![]() |
#89 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
( Основной смысл сдвигов внутри цикла, это расценивать переменную result как width-битовое число, а новые биты из потока данных надо класть в самые старшие биты result.) переменная result для CRC8 - 8 ,бит,для СRС16 - 16 бит так? А новые биты из потока данных могут быть как 8. так и 16 бит мы кладём в самые старшие биты result - не понятно. ? |
|
![]() |
![]() |
![]() |
#90 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Да.
Нет. Из потока всегда берется 8 бит за один раз. Но разместить их надо всегда в старшие биты result. Поэтому для CRC16 сдвиг "shl 8", а для CRC8 не было сдвига вообще (если рассматривать функции до CRCN).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |