2014-10-18 4 views
3

왜 내 readShort 함수가이 숫자를 제대로 읽지 못하는지 해결책을 찾고 있습니다 (602).바이트 배열에서 짧은 읽기

바이트 배열은 포함이 상대적으로 큰 가치가 올 때까지 잘 작동하고있다 는 0x02의 0x05는 0x02 0x5A

byte tab = pkt.read(); //successfully reads 2 
byte color = pkt.read(); //successfully reads 5 
short len = pkt.readShort(); //problem 

내 내의 readShort 기능.

public short readShort() { 
    short read = (short)((getBytes()[0] << 8) + getBytes()[1] & 0xff); 
    return read; 
} 

25A는 602이지만,이 값은 len = 90 (5A)입니다. 그러면 0x02를 읽지 않는 이유는 무엇입니까?

죄송합니다. 내 기능에 여분의 괄호 세트가 필요했습니다. 해결했다 : short read = (short)(((getBytes()[0] & 0xff) << 8) + (getBytes()[1] & 0xff))

+1

이 나 수도를하지 않을 수도 같은 DataInputStream 뭔가를 사용할 수 있지만 그것이 될 수있는' getBytes() [0] << 8' 라인. '(getBytes() [0] & 0xff) << 8'로 바꾸십시오. – Pokechu22

+1

나는 그것을 시도했지만 길이가 90이라고 여전히 말하고있다. 어느 쪽이든, 그것을 고쳤다. 다른 괄호 세트가 필요했습니다. 새로운 코드는 짧은 읽기 = (짧은) (((getBytes() [0] & 0xff) << 8) + (getBytes() [1] & 0xff) 고마워! – Rahul

+0

'(짧은) ((짧은) getBytes() [0]) << 8)' –

답변

2

당신이 (당신의 예상)

byte[] bytes = new byte[] { 0x02, 0x05, 0x02, 0x5A }; 
DataInputStream pkt = new DataInputStream(new ByteArrayInputStream(bytes)); 
try { 
    byte tab = pkt.readByte(); 
    byte color = pkt.readByte(); 
    short len = pkt.readShort(); 
    System.out.printf("tab=%d, color=%d, len=%d%n", tab, color, len); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

출력

tab=2, color=5, len=602