理解cdrom的crc32多项式
Understanding crc32 polynomial of cdrom
CDROM 数据使用 Reed-Solomon 的第 3 层错误检测和使用 32_bits CRC 多项式的 EDC。
ECMA 130 标准定义 EDC CRC 多项式如下(第 16、14.3 页):
P(X) = (X^16 + x^15 + x^2 + 1).(x^16 + x^2 + x + 1)
和
The least significant bit of a data byte is used first.
通常,将多项式转换为其整数值形式非常简单。使用模数学,扩展多项式必须是 P(X) = x^32 + x^31 + x^18 + x^17 + x^16 + x^15 + x^4 + x^3 + x^2 + x + 1
,因此值为 0x8007801F
最后一句的意思是多项式取反了(如果我没猜错的话)。
但到目前为止我没能得到正确的值。 Cdrtools source code 使用 0x08001801 作为多项式值。有人可以解释他们是如何找到这个价值的吗?
发布答案:
首先,我在用于展开多项式的模2代数中犯了一个错误。非模扩展形式是:
P(X) = x^32 + x^31 + 2x^18 + 2x^17 + 3x^16 + x^15 + x^4 + x^3 + 2x^2 + x + 1
模2代数中偶数系数为0,奇数系数为1,所以最终的展开多项式为:
P(X) = x^32 + x^31 + x^16 + x^15 + x^4 + x^3 + x + 1
所以,实际值为0x8001801B
其次,我看错了cdrtools的源码,它们的值也是0x8001801B
。
CDROM 数据使用 Reed-Solomon 的第 3 层错误检测和使用 32_bits CRC 多项式的 EDC。
ECMA 130 标准定义 EDC CRC 多项式如下(第 16、14.3 页):
P(X) = (X^16 + x^15 + x^2 + 1).(x^16 + x^2 + x + 1)
和
The least significant bit of a data byte is used first.
通常,将多项式转换为其整数值形式非常简单。使用模数学,扩展多项式必须是 P(X) = x^32 + x^31 + x^18 + x^17 + x^16 + x^15 + x^4 + x^3 + x^2 + x + 1
,因此值为 0x8007801F
最后一句的意思是多项式取反了(如果我没猜错的话)。
但到目前为止我没能得到正确的值。 Cdrtools source code 使用 0x08001801 作为多项式值。有人可以解释他们是如何找到这个价值的吗?
发布答案:
首先,我在用于展开多项式的模2代数中犯了一个错误。非模扩展形式是:
P(X) = x^32 + x^31 + 2x^18 + 2x^17 + 3x^16 + x^15 + x^4 + x^3 + 2x^2 + x + 1
模2代数中偶数系数为0,奇数系数为1,所以最终的展开多项式为:
P(X) = x^32 + x^31 + x^16 + x^15 + x^4 + x^3 + x + 1
所以,实际值为0x8001801B
其次,我看错了cdrtools的源码,它们的值也是0x8001801B
。