Sep 132012
 

자바를 이용해서 네트워크 프로그램을 작성하면서 자바의 데이타 형태 때문에 고생을 했다.
그래서 한번 확인을 하고 정리를 해봤습니다.

네트워크에서 받은 데이타들을 대부분 byte[]로 처리를 하고 있는데, 이를 숫자로 변환하기 위해서는 byte 2개 혹은 4개를 조합해서 사용하면 된다.

여기서 문제가 발생이 되는데, java의 대부분의 data type은 signed type으로 되어 있다.
(제가 사용하는 네트워크 데이타는 비트 단위로 연산을 하기 때문에 binary type으로 데이타를 조작을 해야 하는 경우가 대부분입니다.)

byte는 signed type으로 되어 있으며, 이를 short로 casting을 하고, << 8과 같이 연산을 하더라도 음수가 발생이 될수 있다. 이런 경우에는 (short)(byte[] & 0xFF) 형태로 먼저 & 연산을 처리후에 casting을 해서 연산을 처리하면 해결이 가능하다.
하지만 2 byte 데이타를 숫자로 변환을 하면, short type에 담을수가 없다. short type도 signed data 이기 때문에 char type 혹은 int type에 데이타를 저장해야 한다.

그래서 여러번의 테스트를 해보면서 data type을 이해를 하면서 만든 코드가 아래 1줄이다. -_-

 
int id=(int)((int)(data[0] & 0xFF) << 8) + (short)(data[1] & 0xFF);

* byte (1 byte, -128~127)
* char (2 byte, 0~65535)
* short (2 byte, -32768~32767)
* int (4 byte, -2147483648~2147483647)
* long (8 byte, -9223372036854775808 ~ 9223372036854775807)

* float (4 byte)
* double (8 byte)

참고URL : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins