2014-07-21 2 views
0

내 프로그램을 Processing에 씁니다. 그러나이 언어 문제 만이 아니라고 생각합니다. 코드 :0 바이트 시프트 비트

long combine8(int array[]) { 
long result = 0; 
for (int i = 0; i<8; i++) { 
    byte byteval = (byte)array[i]; 
    result |= (byteval<<(8*i)); 
} 
return result; 
} 

이 기능은 8 바이트를 하나의 긴 값으로 결합합니다. 배열 값 중 하나가 0이 될 때까지 정상적으로 작동합니다. 그냥 무시합니다. 예를 들어

Array value: 1 binary 00000001 
Array value: 0 binary 00000000 
Array value: 0 binary 00000000 
Array value: 0 binary 00000000 
Array value: 0 binary 00000000 
Array value: 160 binary 10100000 
Array value: 255 binary 11111111 
Array value: 25 binary 00011001 
Result: 11111111111111111010000000000001 

결과 값 인하여 진수 표시 int로 긴 파싱 절단하지만이 사정을 갖고, 그 제 16 개 비트를 참조 할 충분. 그것은 0 배열 값을 무시하고 1 후에 160을 썼습니다. 결과에 0을 적용 할 수있는 방법이 있습니까?

답변

2

추측 :

result |= (((long)byteval)<<(8*i)); 

을하거나 처음에 bytearray[i]지지 않도록 : 긴 처음에 바이트를 전송 해 봅니다.

+0

야생이지만 작동했습니다! 바이트로 캐스팅을 삭제하고 배열 요소를 캐스팅 한 후 오랫동안 작동했습니다. 감사! – PaulPonomarev