C# hashcode for array of ints
For an array of values generally between -1000 and 1000, I would probably use something like this:
static int GetHashCode(int[] values){ int result = 0; int shift = 0; for (int i = 0; i < values.Length; i++) { shift = (shift + 11) % 21; result ^= (values[i]+1024) << shift; } return result;}
You may use CRC32 checksum. Here is the code:
[CLSCompliant(false)]public class Crc32 { uint[] table = new uint[256]; uint[] Table { get { return table; } } public Crc32() { MakeCrcTable(); } void MakeCrcTable() { for (uint n = 0; n < 256; n++) { uint value = n; for (int i = 0; i < 8; i++) { if ((value & 1) != 0) value = 0xedb88320 ^ (value >> 1); else value = value >> 1; } Table[n] = value; } } public uint UpdateCrc(uint crc, byte[] buffer, int length) { uint result = crc; for (int n = 0; n < length; n++) { result = Table[(result ^ buffer[n]) & 0xff] ^ (result >> 8); } return result; } public uint Calculate(Stream stream) { long pos = stream.Position; const int size = 0x32000; byte[] buf = new byte[size]; int bytes = 0; uint result = 0xffffffff; do { bytes = stream.Read(buf, 0, size); result = UpdateCrc(result, buf, bytes); } while (bytes == size); stream.Position = pos; return ~result; }}