public class Crc32
{
uint[] table;
public uint Checksum(byte[] bytes)
{
uint crc = 0xffffffff;
for(int i = 0; i < bytes.Length; ++i)
{
byte index = (byte)(((crc) & 0xff) ^ bytes[i]);
crc = (uint)((crc >> 8) ^ table[index]);
}
return ~crc;
}
public byte[] ChecksumBytes(byte[] bytes)
{
return BitConverter.GetBytes(Checksum(bytes));
}
public Crc32()
{
uint Q= 0x12345678;
table = new uint[256];
uint temp = 0;
for(uint i = 0; i < table.Length; ++i)
{
temp = i;
for(int j = 8; j > 0; --j)
{
if((temp & 1) == 1)
{
temp = (uint)((temp >> 1) ^ Q);
}
else
{
temp >>= 1;
}
}
table[i] = temp;
}
}
}
沒有留言:
張貼留言