2010-08-18 4 views

답변

41

다른 답변은 이미 말했듯이, byte는 Java에서 서명 된 유형입니다. 범위는 -128에서 127까지입니다. 따라서 0xff는 -0x01과 같습니다.

byte[] rawbytes={0xa, 0x2, (byte) 0xff}; 
7

byte0xff = 255이 너무 큽니다. 유효한 범위는 (-128 .. 127)입니다.

예 번호 :

public static void main(String[] args) { 
    byte b = (byte) 0xff; // = -1 
    int i = b;    // = -1 
    int j = b & 0xff;  // = 255 

    System.out.printf("b=%s, i=%s, j=%s", b,i,j); 
} 
8

가 "0xFF를"는 바이트로서 표현할 수없는 소수점 이하의 값 (255)에 대한 리터럴 int이다. y (

byte[] rawbytes = { 0xA, 0x2, (byte) 0xFF }; 

그것은 새로운 바이트 문자 구문을 추가 할 것을 제안했다 나 :

지금,이 같은, 당신이 정말로 -1을 의미 컴파일러를 알려줄 수있는 byte에 캐스팅해야합니다 Java 7.-Y 접미사) 그럼 당신은 쓸 수 있었을 것이다 :

byte[] rawbytes = { 0xA, 0x2, 0xFFy }; 

그러나이 제안은 포함되지 않았다 "개선 된 통합 리터럴 옴니버스 제안,"우리가 영원히 캐스트 붙어있을 수 있도록.

+7

은'y' 접미사는 자바 7 릴리스하지 않았다. 독자에게 혼란을주지 않도록 해당 부분을 제거하십시오. – Natix

12

변수 인수와 도우미 함수를 선언함으로써 하나 더 가능성이있다 : 당신이 수동 캐스트를 추가하는 경우는 0xff가에게 대신 -0x01의를 사용할 수 있습니다. 다중 바이트 배열을 선언해야하는 경우이 방법이 더 좋습니다.

예제 코드

public static byte[] toBytes(int... ints) { // helper function 
    byte[] result = new byte[ints.length]; 
    for (int i = 0; i < ints.length; i++) { 
     result[i] = (byte) ints[i]; 
    } 
    return result; 
} 

public static void main(String... args) { 

    byte[] rawbytes = toBytes(0xff, 0xfe); // using the helper 

    for (int i = 0; i < rawbytes.length; i++) { 
     System.out.println(rawbytes[i]); // show it works 
    } 
}