![]() |
|
|
![]()
|
|
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Нужно посчитать 8-битное CRC для строки из N байт.
Полином: X^8 + X^4 + X^3 + X^2 + 1 Начальное заполнение регистра: 0F или 00001111 не получается |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Podval, а что именно не получается ?
Мобыть, несколько не в тему, но когда-то и мне нужно было сделать CRC8. Так я по ленности своей вычислял CRC16 (имелся под рукой такой модуль), а потом ксорил старший и младший байты результата. Работало (всмысле, определяло ошибки, а также и в качестве хеш-функции). Кстати, если не секрет, откуда порождающий полином для CRC8 ? Это сообщение отредактировал(а) Crait - 4.11.2004, 02:24 |
|||
|
||||
| podval |
|
||||||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Я пробовал так:
Проблема в том, что crc8 возвращается не то, какое надо. Пробовал и это:
Получается другой результат и тоже неправильный. Я так понимаю, что второй вариант не адаптирован под мой полином. Может как-то можно адаптировать? Но более всего непонятно, почему первый вариант выдает не то. З.Ы. Полином из спецификации SBC-кодека. Добавлено @ 09:00
Как? Друг с другом? |
||||||
|
|||||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Ну да. Могу еще посоветовать перебрать все 8-бит полиномы и инициирующие значения - это не так и много - 65536 вариантов. ЗЫ А может еще и результат с чем-нибудь ксорится - тут без анализа нескольких вариантов вход-выход не обойтись. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Не, результат ни с чем не ксорится.
|
|||
|
||||
| Crait |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Вот, откопал у себя еще вариант CRC8. ПисАл не я.
crc8.h :
crc8.cpp :
|
||||
|
|||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Дык это ж то же самое
|
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Ага. Подумал, может, полином у тебя именно такой,
как в этом исходнике. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Нашел! Таблицу надо формировать "зеркально":
|
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Как переделать этот алгоритм, чтобы он обрабатывал не байты, а полубайты?
Проблема в том, что мне надо обработать строку, которая не умещается в целое число байт. Остановить подсчет CRC надо именно на последнем полубайте. Последний же из приведенных здесь табличных алгоритмов разработан под обработку целого числа байт и не может обработать, например 6 и 1/2 байта. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
а вот для полубайтов Присоединённый файл ( Кол-во скачиваний: 2 )
8_0.5.EXE-------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Crait |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 Репутация: 1 Всего: 1 |
Могу рассказать, как формировать CRC побитно.
Это актуально, podval ? |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Crait
Я думал, что и так это знаю, только у меня почему-то побитный результат не совпал с табличным. Я считал для такой строки: 2С 2А 00 00 00 0 . У меня получилось 8D, а правильный ответ Е8. Вот еще и код слепил:
Что не так? Если я и правда что-то недоучил, то с меня пол-литры Еще раз попытаюсь объяснить ситуацию. Кодек-образец и мой кодек (с табличным алгоритмом) работают в плане вычисления CRC одинаково до тех пор, пока надо вычислять CRC на целом количестве байт. КАК ИМЕННО надо вычислять CRC в ситуации, когда данные занимают сколько-то с половиной байт, в спецификации не указано (руки оторвать писателям! Однако такой же CRC, как я выяснил, используется в GSM/TCH/EFS Precoder. Может кто-то знает, как там разруливается эта ситуация? Добавлено @ 10:09 oleg1973 Я попытасюсь вспомнить асм Только че-то не скачивается ехе. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Поигрался сейчас с отбрасыванием лишних пол-байт и дополнением нулями до байта - туфта выходит. Не совпадает с refrence codec.
Наверное, в консерватории надо что-то поправить. Поможите, люди добрые! |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Кажись, обнаружил пробел в "консерватории". Вот так работает, если ксорить на каждом шаге содержимое регистра с байтом сообщения и проверять старший бит результата:
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |