在对 CRC-32 算法做了一些研究之后,我得到了以下结论:
/* Usage: Recursively call this with previous crc. Start with crc = 0. */
#define POLYNOMIAL 0x04C11DB7
unsigned int crc32( unsigned int crc, char* msg, unsigned int len ) {
for ( unsigned int byteNum = 0; byteNum < len; byteNum++ ) {
char msgByte = msg[ byteNum ];
for ( unsigned int bitNum = 0; bitNum < 8; bitNum++ ) {
char msgBit = ( msgByte >> ( 7 - bitNum ) ) & 0x1;
if ( ( crc & 0x80000000 ) != 0 )
crc = ( ( crc << 1 ) | msgBit ) ^ POLYNOMIAL;
else
crc = ( crc << 1 ) | msgBit;
}
}
return crc;
}
但是我的代码的输出与常用的 CRC-32 函数的输出完全不同(用表格优化)
现在我希望有人能给我 CRC-32 算法的示例源代码,该算法没有通过表格进行优化,并且可以很好地了解它的实际工作原理。
谢谢,
丹尼斯