java c 와 tcp 통신시 주의점. signed unsigned byte양수표현 음수양수변환
java는 c 와 tcp 통신시 주의점이 있습니다.
기본형의 최소단위 차이인데요. c에는 bit 이 최소 단위이지만, java 는 byte가 최소 단위 입니다.
8 bit 가 1byte 가 되죠.
근데 뭐가 문제냐. 바로 자료형의 범위 입니다.
자바는 unsigned 키워드가 없기 때문에 -128 ~ 127 까지의 범위를 갖습니다.
(signed : 부호가 있는)
하지만 unsinged 키워드가 있는 c 는 0 ~ 255 까지의 범위를 갖죠.
그래서 127이 넘는 byte 는 음수로 표현이 되게 됩니다.
211을 byte로 변형하면 1101 0011 이 됩니다. 여기서 맨앞 비트가 1이기
자바에서는 때문에 음수로 인식하죠.
그래서 출력을 해보면 -45 라는 음수를 표출합니다.
byte test = (byte)211;
이것을 양수로 표현하기 위해서는 비트연산자인 &를 사용합니다.
byte test = (byte)(211 & 0xff); // 211
논리곱(&) 연산자는 각비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환합니다.
위에서 보신데로 211을 바이트로 변형하면 1101 0011 이 되죠.
이것을 0xff(255) 1111 1111 와 논리곱 연산을 하는 것입니다.
1101 0011
1111 1111
=======
1101 0011 그럼 왼쪽과 같은 결과가 나오게 되죠.
16진수인 0xff 와 논리곱 연산을 하게되면 0xD3 (1101 0011) 와 같은 16진수 결과가 나오게 되고
이것을 바이트 변환 하는 것입니다. 그럼 원래의 값인 211이라는 양수표현이 되는것이죠.
'Programing > JAVA' 카테고리의 다른 글
ORA-28040: 일치하는 인증 프로토콜 없음, No matching authentication protocol 해결방법 (0) | 2018.02.22 |
---|---|
Java Spring FTP 파일 다운로드 FTP file download (0) | 2018.02.07 |
Oracle 오라클 myBatis BLOB 파일 저장, 불러오는 방법 이미지 미리보기 (0) | 2018.02.02 |
javascript spring 멀티파일선택 업로드 ajaxForm multipart/form-data MultipartHttpServletRequest (4) | 2018.02.02 |
java html 태그 변환 치환 StringEscapeUtils " & < > 등 (0) | 2018.01.22 |
댓글