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