Guest User

Hash32

a guest
Jul 8th, 2015
1,071
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.66 KB | None | 0 0
  1.     public static uint Hash(string k, uint init)
  2.     {
  3.       int index = 0;
  4.       int length = k.Length;
  5.       uint num1 = 2654435769U;
  6.       uint num2 = num1;
  7.       uint num3 = init;
  8.       while (length >= 12)
  9.       {
  10.         uint num4 = num1 + (uint) ((int) k[index] + ((int) k[1 + index] << 8) + ((int) k[2 + index] << 16) + ((int) k[3 + index] << 24));
  11.         uint num5 = num2 + (uint) ((int) k[4 + index] + ((int) k[5 + index] << 8) + ((int) k[6 + index] << 16) + ((int) k[7 + index] << 24));
  12.         uint num6 = num3 + (uint) ((int) k[8 + index] + ((int) k[9 + index] << 8) + ((int) k[10 + index] << 16) + ((int) k[11 + index] << 24));
  13.         uint num7 = num4 - num5 - num6 ^ num6 >> 13;
  14.         uint num8 = num5 - num6 - num7 ^ num7 << 8;
  15.         uint num9 = num6 - num7 - num8 ^ num8 >> 13;
  16.         uint num10 = num7 - num8 - num9 ^ num9 >> 12;
  17.         uint num11 = num8 - num9 - num10 ^ num10 << 16;
  18.         uint num12 = num9 - num10 - num11 ^ num11 >> 5;
  19.         num1 = num10 - num11 - num12 ^ num12 >> 3;
  20.         num2 = num11 - num12 - num1 ^ num1 << 10;
  21.         num3 = num12 - num1 - num2 ^ num2 >> 15;
  22.         index += 12;
  23.         length -= 12;
  24.       }
  25.       uint num13 = num3 + (uint) k.Length;
  26.       switch (length)
  27.       {
  28.         case 1:
  29.           num1 += (uint) k[index];
  30.           break;
  31.         case 2:
  32.           num1 += (uint) k[1 + index] << 8;
  33.           goto case 1;
  34.         case 3:
  35.           num1 += (uint) k[2 + index] << 16;
  36.           goto case 2;
  37.         case 4:
  38.           num1 += (uint) k[3 + index] << 24;
  39.           goto case 3;
  40.         case 5:
  41.           num2 += (uint) k[4 + index];
  42.           goto case 4;
  43.         case 6:
  44.           num2 += (uint) k[5 + index] << 8;
  45.           goto case 5;
  46.         case 7:
  47.           num2 += (uint) k[6 + index] << 16;
  48.           goto case 6;
  49.         case 8:
  50.           num2 += (uint) k[7 + index] << 24;
  51.           goto case 7;
  52.         case 9:
  53.           num13 += (uint) k[8 + index] << 8;
  54.           goto case 8;
  55.         case 10:
  56.           num13 += (uint) k[9 + index] << 16;
  57.           goto case 9;
  58.         case 11:
  59.           num13 += (uint) k[10 + index] << 24;
  60.           goto case 10;
  61.       }
  62.       uint num14 = num1 - num2 - num13 ^ num13 >> 13;
  63.       uint num15 = num2 - num13 - num14 ^ num14 << 8;
  64.       uint num16 = num13 - num14 - num15 ^ num15 >> 13;
  65.       uint num17 = num14 - num15 - num16 ^ num16 >> 12;
  66.       uint num18 = num15 - num16 - num17 ^ num17 << 16;
  67.       uint num19 = num16 - num17 - num18 ^ num18 >> 5;
  68.       uint num20 = num17 - num18 - num19 ^ num19 >> 3;
  69.       uint num21 = num18 - num19 - num20 ^ num20 << 10;
  70.       return num19 - num20 - num21 ^ num21 >> 15;
  71.     }
Advertisement
Add Comment
Please, Sign In to add comment