![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#111 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
Вот попробовал написать одну функцию,компилируется, считает, выводит, но сумма не та на выходе, опять, что то пропустил, или не учёл ? Код:
|
|
![]() |
![]() |
![]() |
#112 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Параметры от "CRC-32/MPEG-2", вроде. В коде потеряли один Continue. И нужно "shl 8" на "shl 24" заменить.
Переведите маски в двоичное представление. Тогда станет понятнее. На первом шаге меняются местами соседние биты, на втором шаге соседние 2 бита и т.д. На последнем шаге меняются местами половины 16битного числа.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() Последний раз редактировалось BDA; 19.11.2021 в 05:34. |
![]() |
![]() |
![]() |
#113 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
В коде потеряли один Continue., да точно, добавил. И нужно "shl 8" на "shl 24" заменить. заменил на 24 Код:
Ругается, на эту строку : Result := Result xor (ord(P[i]) shl 24); |
|
![]() |
![]() |
![]() |
#114 | ||
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]() Цитата:
Цитата:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
||
![]() |
![]() |
![]() |
#115 | |
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
Код:
Как другие ? RefIn true RefOut true XorOut 0xFFFFFFFF В остальном исправил, но показывает не верно сумму. Код:
проверил выдаёт правильные значения по CRC-32/MPEG-2 как так. вводил zip а выдаёт от другой? Последний раз редактировалось BDA; 19.11.2021 в 18:45. |
|
![]() |
![]() |
![]() |
#116 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Для RefIn = true и RefOut = true требуется рабочий reverse. "Result := Result xor (ord(P[i]) shl 24);" - это код для RefIn = false. Кода, который переворачивает Result (для RefOut = true) и который выполняет xor c 0xFFFFFFFF, нет, что можно расценивать как RefOut = false и XorOut = 0. Вот и получилось, что параметры на самом деле соответствуют "CRC-32/MPEG-2".
Вот функция reverse для байта: Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#117 | ||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
без него не обойтись? Цитата:
А то я не пойму ни как что надо сделать в коде, без реверса. чтоб 32 зип была? голова на сегодня уже всё. отказывается работать. перегруз.... Последний раз редактировалось BDA; 19.11.2021 в 18:45. |
||
![]() |
![]() |
![]() |
#118 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Потому что калькулятор это не достаточно наглядно. Можете посмотреть статью про битовые операции, затем возьмите листок в клетку, напишите любое 8битное двоичное число, и проделайте хотя бы первую строку кода функции reverse, внимательно следя, куда пошел каждый бит.
Не обойтись. Ну или просто не трогать алгоритмы с RefIn = true и RefOut = true, пока не почините reverse. Так не получится. Можете написать свою функцию reverse, которая циклом "собирает" по битам перевернутое число. Будет медленнее, зато, может быть, понятнее.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
![]() |
![]() |
![]() |
#119 | |||||
Форумчанин
Регистрация: 12.03.2019
Сообщений: 432
|
![]() Цитата:
Взял листок попробовал, если я не ошибаюсь, то это сдвиг бита в лево на 1 бит, или на 2, или 4 бита согласно функции revers мы в зависимости от логики, сдвигаем бит либо в лево, либо в право и как я понял от этого зависит false, или true лож , или истина. вроде понятно что функция revers это функция логическая, которая определяет когда лож, а когда истина. Очень отличное решение, кто бы спорил. Но всё ровно не понял значений $5555, $3333), $0F0F из чего они берутся и для каких типов CRC? Цитата:
Цитата:
Цитата:
Безусловно функция revers нужная и универсальная функция и она лучше и нужней. Просто я недопонимаю значений, откуда, они взяты . То что функция переносит биты в лево и в право , в зависимости от boolean лож, или истина , для этого и написана эта функция, это я понял. Не могу понять значений в скобках и принцип действия, когда вступает CRC16, когда CRC15 и когда CRC8 ? Цитата:
вторая строка : f := ((f shr 2) and $3333) or ((f and $3333) shl 2); $3333 - 11001100110011 сдвиг уже на 2 бита либо в лево. либо в право как не сдвигай на выходе 0 false тоже ясно. Не ясно для какой CRC и для какого количество бит ? третья строка : f := ((f shr 4) and $0F0F) or ((f and $0F0F) shl 4); 111100001111( куда не сдвигай всегда будет истина true, сдвиг уже по 4 бита понятно, опять не понятно значение $0F0F откуда взята для какой CRC и для скольких бит ? четвёртая строка : f := (f shr 8) or (f shl 8); здесь понятно что для 1 байта, или 8 бит, в право, или лево, значит строго по 8 бит обработка для всех, это понятно. Result := f; данные переменной f присваиваем переменной Result это тоже понятно. вторая Последний раз редактировалось BDA; 20.11.2021 в 21:52. |
|||||
![]() |
![]() |
![]() |
#120 | |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,428
|
![]()
Не логическая.
Общий смысл операций уже писал: "На первом шаге меняются местами соседние биты, на втором шаге соседние 2 бита и т.д. На последнем шаге меняются местами половины 16битного числа.". Реализовывать только те варианты CRC, в которых RefIn = false и RefOut = false. Цитата:
Не нужно смотреть на флаги RefIn и RefOut. Хоть в коде и есть ИЛИ, но это битовые, а не логические операции. Лучше рассматривайте вариант для Byte, чтобы не выписывать 16битовые числа. Вы наконец перевели маски в двоичное представление. Осталось проделать каждый шаг на бумаге, чтобы увидеть происходящие изменения с числом.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись
![]() |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |