生成多项式0x04C11DB7,编码解码初始化全为1;
获取码表:
public static uint[] Crc32Table()
{
uint crc;
uint[] Crc32tab = new uint[256];
for (int m = 0; m < 256; m++)
{
crc = (uint)m;
for (int j = 8; j > 0; j--)
{
if ((crc & 1) == 1)
{
crc = (crc >> 1) ^ 0xedb88320;
}
else
{
crc >>= 1;
}
}
Crc32tab[m] = crc;
}
return Crc32tab;
}
校验实现
public static uint GetCRC32Byte(byte[] bytes)
{
uint[] Crc32tab = Crc32Table();
uint value = 0xffffffff;
int len = bytes.Length;
for (int i = 0; i < len; i++)
{
value = (value >> 8) ^ Crc32tab[(value & 0xff) ^ bytes[i]];
}
return value ^ 0xffffffff;
}