的我發現的Adler32這裏的代碼http://developer.classpath.org/doc/java/util/zip/Adler32-source.html的Adler32 Java的逐位和輸入
但是我更新的代碼看起來像下面
private int a = 1, b = 0;
public void update(byte[] buf, int offset, int len)
{
for (int i = offset; i < len; i++) {
a = (a + buf[i]) % MOD_ADLER;
b = (b + a) % MOD_ADLER;
}
}
爲
public void update(byte[] buf, int offset, int len)
{
for (int i = offset; i < len; i++) {
a = (a + (buf[i] & 0xff)) % MOD_ADLER; // <<=== Why & 0xff ?
b = (b + a) % MOD_ADLER;
}
}
我做的鏈接反對碼不明白需要與0xff
作爲buf[i]
已經是8個字節,據我所知它會被提升爲int
作爲a
是int
,仍然該類型的促銷不應改變byte
中的值。可能是我錯過了一些更多的細節,因爲它不工作沒有& 0xff
,我測試了它的值計算java.util.zip.Adler32
感謝您的答案,但它只會影響值導致負數,例如在我的測試
byte a = -4;
int n1 = a & 0xff;
int n2 = a;
out.printf(" a %4d %s\n", a,Integer.toBinaryString(a));
out.printf("n1 %4d %s\n",n1,Integer.toBinaryString(n1));
out.printf("n2 %4d %s\n",n2,Integer.toBinaryString(n2));
打印
a -4 11111111111111111111111111111100
n1 252 11111100
n2 -4 11111111111111111111111111111100
可能重複[在Java中值是什麼&0xff?](http://stackoverflow.com/questions/11380062/what-does-value-0xff-do-in-java) – leonbloy