2017-10-26 2 views
1

바이트 배열이 있습니다.부호있는 바이트 배열을 부호없는 바이트로 변환

bytes[] = [43, 0, 0, -13, 114, -75, -2, 2, 20, 0, 0] 

자바의 부호없는 바이트로 변환하고 싶습니다. 이 내가 무슨 짓 : 새로운 배열을 생성 &를 0xFF로 값을 복사 :

this.bytes = new byte[bytes.length]; 
    for (int i=0;i<bytes.length;i++) 
     this.bytes[i] = (byte) (bytes[i] & 0xFF); 

을하지만 값뿐만 아니라 새로운 배열에 부정적인있어. 내가 뭘 잘못 했니?

+7

에는 서명이 없습니다를 Java의 바이트. – Sweeper

+0

''byteValue & 0xFF''와 같은 연산을하기 위해서 무엇을 기대합니까? – f1sh

+1

@ f1sh 그것은 서명 된 바이트를 unsigned'int'로 변환한다는 측면에서 옳은 일을합니다. 예를 들어 음수 값으로 바이트를 캐스팅 한 경우 'int'에'int'로 끝납니다. 그래서 코드의 일부는 문제가 아니며, 다시 시작한 것과 동일한 음수 값으로 끝나는 '바이트'에 되돌려 놓습니다 (다시 캐스팅되었습니다). – Lothar

답변

1

자바에는 부호없는 바이트가 없습니다. short 또는 int과 같은 다른 유형을 사용해야 127보다 큰 값을 보유 할 수 있습니다.

3

bytes Java는 항상 서명됩니다.

당신이 바이트의 부호없는 값을 취득하려는 경우, 당신은 int 배열에 저장할 수 있습니다 :

byte[] signed = {43, 0, 0, -13, 114, -75, -2, 2, 20, 0, 0}; 
int[] unsigned = new int[signed.length]; 
for (int i = 0; i < signed.length; i++) { 
    unsigned[i] = signed[i] & 0xFF; 
} 

다음과 같은 값을 얻을 것이다 :

[43, 0, 0, 243, 114, 181, 254, 2, 20, 0, 0] 
+0

나는 알고있다. 감사! 파이썬에서, 그 이유가 잘못되었습니다. – Ohad

관련 문제