namespace BizHawk.Emulation.Common { // we could get a little list of crcs from here and make it clear which crc this class was for, and expose others // http://www.ross.net/crc/download/crc_v3.txt // TODO - why am I here? put me alongside hash_md5 and such in a non-emulation-related class public static class CRC32 { // Lookup table for speed. private static readonly uint[] Crc32Table; static CRC32() { Crc32Table = new uint[256]; for (uint i = 0; i < 256; ++i) { uint crc = i; for (int j = 8; j > 0; --j) { if ((crc & 1) == 1) { crc = (crc >> 1) ^ 0xEDB88320; } else { crc >>= 1; } } Crc32Table[i] = crc; } } public static int Calculate(byte[] data) { uint result = 0xFFFFFFFF; foreach (var b in data) { result = (result >> 8) ^ Crc32Table[b ^ (result & 0xFF)]; } return (int)~result; } } }