Данные CDROM используют 3-й уровень обнаружения ошибок с использованием Рида-Соломона и EDC с использованием 32-битного полинома CRC.
Стандарт ECMA 130 определяет полином EDC CRC следующим образом ( стр.16, 14.3):
P(X) = (X^16 + x^15 + x^2 + 1).(x^16 + x^2 + x + 1)
А также
Первым используется младший бит байта данных.
Обычно перевод полинома в форму целочисленного значения довольно прост. Используя математический модуль, расширенный многочлен должен быть P(X) = x^32 + x^31 + x^18 + x^17 + x^16 + x^15 + x^4 + x^3 + x^2 + x + 1
, таким образом, значение будет 0x8007801F
Последнее предложение означает, что многочлен перевернут (если я правильно понял).
Но мне пока не удалось получить правильную стоимость. В исходном коде Cdrtools используется значение полинома 0x08001801. Может кто-нибудь объяснить, как они нашли эту ценность?
1 ответ
Размещение ответа:
Во-первых, я ошибся в алгебре по модулю 2, использованной для раскрытия полинома. Развернутая форма без модуля:
P(X) = x^32 + x^31 + 2x^18 + 2x^17 + 3x^16 + x^15 + x^4 + x^3 + 2x^2 + x + 1
Любой четный коэффициент равен 0, а нечетные равны 1 в алгебре по модулю 2, поэтому окончательный развернутый многочлен равен:
P(X) = x^32 + x^31 + x^16 + x^15 + x^4 + x^3 + x + 1
Итак, фактическое значение равно 0x8001801B
Во-вторых, я неправильно прочитал исходный код cdrtools, их значение тоже 0x8001801B
.
Похожие вопросы
Новые вопросы
crc32
Циклическая проверка избыточности (CRC) - это код обнаружения ошибок, разработанный для обнаружения случайных изменений необработанных компьютерных данных, который обычно используется в цифровых сетях. ( Вики ) Алгоритм CRC32 обычно принимает поток файлов или массив символов и вычисляет длинное кодовое слово без знака на основе входных данных. Можно передать это кодовое слово и пересчитать его на стороне получателя, а затем сравнить его с переданным для обнаружения ошибки.