BizHawk/BizHawk.Emulation/Database/CRC32.cs

34 lines
709 B
C#
Raw Normal View History

2011-01-11 02:55:51 +00:00
namespace BizHawk
{
public static class CRC32
{
// Lookup table for speed.
private static uint[] CRC32Table;
static CRC32()
{
2011-01-17 07:41:01 +00:00
CRC32Table = new uint[256];
for (uint i = 0; i < 256; ++i)
{
uint crc = i;
for (int j = 8; j > 0; --j)
2011-01-11 02:55:51 +00:00
{
2011-01-17 07:41:01 +00:00
if ((crc & 1) == 1)
crc = ((crc >> 1) ^ 0xEDB88320);
else
crc >>= 1;
2011-01-11 02:55:51 +00:00
}
2011-01-17 07:41:01 +00:00
CRC32Table[i] = crc;
}
2011-01-11 02:55:51 +00:00
}
public static int Calculate(byte[] data)
{
2011-01-17 07:41:01 +00:00
uint Result = 0xFFFFFFFF;
foreach (var b in data)
Result = (((Result) >> 8) ^ CRC32Table[b ^ ((Result) & 0xFF)]);
return (int)~Result;
2011-01-11 02:55:51 +00:00
}
}
}