CRC.java 847 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // SevenZip/CRC.java
  2. package SevenZip;
  3. public class CRC
  4. {
  5. static public int[] Table = new int[256];
  6. static
  7. {
  8. for (int i = 0; i < 256; i++)
  9. {
  10. int r = i;
  11. for (int j = 0; j < 8; j++)
  12. if ((r & 1) != 0)
  13. r = (r >>> 1) ^ 0xEDB88320;
  14. else
  15. r >>>= 1;
  16. Table[i] = r;
  17. }
  18. }
  19. int _value = -1;
  20. public void Init()
  21. {
  22. _value = -1;
  23. }
  24. public void Update(byte[] data, int offset, int size)
  25. {
  26. for (int i = 0; i < size; i++)
  27. _value = Table[(_value ^ data[offset + i]) & 0xFF] ^ (_value >>> 8);
  28. }
  29. public void Update(byte[] data)
  30. {
  31. int size = data.length;
  32. for (int i = 0; i < size; i++)
  33. _value = Table[(_value ^ data[i]) & 0xFF] ^ (_value >>> 8);
  34. }
  35. public void UpdateByte(int b)
  36. {
  37. _value = Table[(_value ^ b) & 0xFF] ^ (_value >>> 8);
  38. }
  39. public int GetDigest()
  40. {
  41. return _value ^ (-1);
  42. }
  43. }