2015-01-15 5 views
0

바이트를 보내고받은 소켓 연결을 처리하고 있습니다. 필자는 소켓 코드를 작성했으며 바이트를 보내고받을 수 있지만 catch가 있습니다. ...들어오는 데이터 바이트 수

Delphi라는 언어로 데이터를 보내고 안드로이드 코드로 수신합니다. 그러나 나는 약간의 문제에 봉착한다.

델파이에서 한 바이트의 최대 값은 255이며 안드로이드의 최대 바이트는 127입니다.이 문제를 어떻게 해결할 수 있습니까? 서명되지 않은 바이트를 사용하는 방법이 있습니까? 바이트 대신 단락을 사용해야합니까?

도움을 주시면 감사하겠습니다.

답변

1

단일 바이트를 읽으려면 8 비트 마스크가있는 비트 번호 & (AND)을 수행하여 더 큰 Java/Android 기본 유형으로 변환하여 부호없는 값으로 해석 할 수 있습니다. 부호 없음 바이트 값으로 소켓에 값을 쓰려면 더 큰 기본 유형을 사용하여 값을 설정 한 다음이 값을 소켓에 쓸 바이트로 캐스트하십시오. 예를 들어

short shortVal = 255; 
    byte byteVal = (byte) shortVal; 
    System.out.println("signed value = " + byteVal); 
    shortVal = (short) (byteVal & 0xFF); 
    System.out.println("unsigned value = " + shortVal); 

자바/안드로이드 서명 값 바이트 해석한다 (이 경우, -1)지만 바이트 (11,111,111)의 8 비트는 여전히 최하위 8 비트와 동일 짧은 255 (0000000011111111).

동일한 기술을 더 큰 유형과 함께 사용할 수 있습니다 (int를 부호없는 것으로 해석하기 위해 16 비트 마스크와 함께 int를 사용하고 int를 부호없는 것으로 해석하기 위해 32 비트 마스크로 길게). 그러나 멀티 바이트 값은 엔디안을 고려해야합니다 필요한 경우 바이트 순서를 변환합니다.

관련 문제