2014-02-19 4 views
0

의 내가 여기 adler32의 코드를 발견은 http://developer.classpath.org/doc/java/util/zip/Adler32-source.htmladler32 자바 비트 입력

그러나 내 업데이트 코드는

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; 
    } 
} 

를 다음과 같습니다 그리고 0xffbuf[i]이 이미 8 바이트 인 것으로 이해할 필요가 없습니다. int으로 승격됩니다. aint이고 형식 승격은 byte의 값을 변경해서는 안됩니다. 그것은 없이는 작동하지 않는 것처럼 좀 더 자세한 내용을 놓칠 수 있습니다, 나는 계산 된 값으로 테스트했습니다 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 
+0

[Java에서 value & 0xff는 무엇을 할 수 있습니까?] (http://stackoverflow.com/questions/11380062/what-does-value-0xff-do-in-java) – leonbloy

답변

0

문제는 byte 자바에 서명한다는 것입니다. 따라서 자동 유형 프로모션 byte ->int은 (0,255) 대신 항상 (-128,127) 범위의 정수를 제공합니다. & 0xff 작업으로 문제가 해결되었습니다.

+0

답변을 주셔서 감사합니다. 그러나 그것은 음의 값에 대해서만 중요 할 것입니다. – user3307582

+0

저는 여러분이이 문제를 아주 잘 이해하고 있는지 확신하지 못합니다. 바이트는 정수로 (부호가 있거나 부호없는 값) 해석 될 수있는 비트 옥텟입니다. 예를 들어 바이트가 바이너리 파일 (실행 파일, 이미지)에서 가져온 파일을 Java'byte []'에 저장하면 약 절반 (MSB에 1이있는 파일)은 "음수 ". – leonbloy