Понимание CRC32 полином CDROM - PullRequest
0 голосов
/ 18 апреля 2020

Данные CDROM используют третий уровень обнаружения ошибок с использованием Рида-Соломона и ED C с использованием полинома 32_bit CR C.

Стандарт ECMA 130 определяет ED C CR C полином, как указано ниже (стр. 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 Ответ

0 голосов
/ 06 мая 2020

Отправка ответа:

Во-первых, я допустил ошибку в алгебре по модулю 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.

...