마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

unsigned 자료형에 대해 질문이 있습니다.

0 추천
자바의 int , short , char 자료형을 통신을 위해

c언어의 unsinged int, short , char로 맞춰 송수신해줘야하는데요

자바에서는 unsigned를 지원하지 않는걸로 알고있습니다 ..

들어오는 unsigend 데이터를 어떻게 받고

보낼때는 어떻게 해야 unsigend 데이터로 만들어 보낼수 있을까요ㅠㅠ

송수신시에는 byte로 변환하여 주고받습니다.

귀한시간 내주셔서 답변해주시는분들께 늘 감사드립니다.
kohler (460 포인트) 님이 2015년 10월 16일 질문

1개의 답변

+1 추천
 
채택된 답변
가급적이면 unsigned를 사용하지 않으면 좋겠지만.. c 계열 서버들에서 많이들 사용하니.. 혹시 Guava 참고해 보세요.. https://github.com/google/guava/wiki/PrimitivesExplained..

저도 예전에 이 기종과 프로토콜 맞추느라 unsigned 때문에 참 불편했었는데.. 요즘의 직렬화 라이브러리 많이 쓰니.. 차후에는 그 쪽으로. ^^
mcsong (44,040 포인트) 님이 2015년 10월 16일 답변
kohler님이 2015년 10월 16일 채택됨
답변 감사합니다.
byte로 들어오는 unsigned 데이터들은 처리를 할 수 있겠습니다만
보낼때는 어떻게 해줘야 할까요 ....
unsigned int로 byte를 만들어 쏴줘야 하는데 감이 잘 안잡히네요...
unsignedint는 내부에서 long 으로 변경해서 사용하시면 됩니다. 그리고, 이 long 값은 아래와 같은 코드로 처리하시면 됩니다.


    public static long parse( byte[] data ) {
        return parse( data, 0 );
    }

    public static long parse( byte[] data, int offset ) {
        return (((long) data[offset] & 0xffL) << 24)
             | (((long) data[offset+1] & 0xffL) << 16)
             | (((long) data[offset+2] & 0xffL) << 8)
             |  ((long) data[offset+3] & 0xffL);
    }

    public static byte[] parse( long number ) {
        byte[] data = new byte[4];
        
        data[0] = (byte) ((number >> 24) & 0xff);
        data[1] = (byte) ((number >> 16) & 0xff);
        data[2] = (byte) ((number >> 8) & 0xff);
        data[3] = (byte) (number & 0xff);

        return data;
    }
...