crc32 使用的多项式是什么?ANSI X3.66 CRC-32 是 0x104C11DB7。crc32 的手册页没有指明它使用的多项式。
所表述的问题是题外话,但是我将尝试通过解决如何搜索有关以一般方式依赖 Perl 模块的工具的文档来使其成为主题;为了:
man <tool>
;
来自man crc32
:
This utility is supplied with the Archive::Zip module for Perl.
Run Code Online (Sandbox Code Playgroud)perldoc <module>
;
来自perldoc Archive::Zip
:
Archive::Zip::computeCRC32( $string [, $crc] )
Archive::Zip::computeCRC32( { string => $string [, checksum => $crc ] } )
This is a utility function that uses the Compress::Raw::Zlib CRC
routine to compute a CRC-32.
Run Code Online (Sandbox Code Playgroud)
递归应用,直到某些东西可用或到达“根”模块;在这种情况下,递归以 结束perldoc Compress::Raw::Zlib
,这没有用;
为多项式上的逐字节 32 位 CRC 计算生成表:x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^ 8+x^7+x^5+x^4+x^2+x+1。
GF(2) 上的多项式以二进制表示,每个系数一位,最高有效位具有最低幂。然后添加多项式只是异或,将多项式乘以 x 是右移一。如果我们调用上面的多项式 p,并将一个字节表示为多项式 q,也是最高有效位的最低幂(因此字节 0xb1 是多项式 x^7+x^3+x+1),那么CRC 是 (q*x^32) mod p,其中 a mod b 表示 a 除以 b 后的余数。
该计算是使用移位寄存器乘法和取余数的方法完成的。寄存器初始化为零,对于每个传入位,如果该位为 1,则 x^32 mod p 添加到寄存器中(其中 x^32 mod p 是 p+x^32 = x^26+... +1),并且寄存器将 mod p 乘以 x(如果移出的位为 1,则将 x 右移并加上 x^32 mod p)。我们从 q 的最高功率(最低有效位)开始,并对 q 的所有八位重复。
第一个表只是所有可能的八位值的 CRC。这是针对 CRC 寄存器值和传入字节的所有组合一次一个字节地生成数据 CRC 所需的所有信息。其余的表允许对 big-endian 和 little-endian 机器进行一次一个字的 CRC 计算,其中一个字是四个字节。
归档时间: |
|
查看次数: |
2663 次 |
最近记录: |