본문 바로가기

Java

[Java] byte 를 hex 값으로 정상 연산하는 법

sensor 에서 들어온 16진수(hex)를 10진수로 변환하여 보여줘야하는 상황이었다.

다만, 하나의 진수가 아닌 자릿수를 두 개로 나눠뒀다.

 0xD3 0x01 이렇게 들어왔다면

0x01 이 더 높은 자리고 0xD3 이 더 낮은 자리다.

그러니까 조합하면 0x01D3 이 돼야한다.

 

일단 기본연산.

10진수라고 생각해보면

2453 이라는 천 단위 수가 있다고 했을 떄,

24와 53으로 나뉜다면

24 * 10^2 + 53 * 10^0 꼴이다.

10^0은 어차피 1이니 높은 자리 수에 진수^2 을 해주는게 핵심이다.

 

위 예시에서 0x01D3 이라면

16진수이므로

먼저 Byte 변수로 0x01 과 0xD3 을 담는다.

 

그 후 (0x01) * 16^2 + 0xD3 을 해주면 답이 나온다.

 

그런데,

Byte로 변환하려니 계속 음수가 나오는게 아닌가??

그래서 보니 0xFF 라는 Byte 변수를 출력하면 -1로 환산되는 식이었다.

0xFE 는 -2 ...

양수 128이 넘어가면 -128 부터 시작되는 느낌이다.

우선 이렇게 되는 이유는 Byte라는 변수가 -127부터 128 부터 취급하는 변수이기 때문이고,

255 까지 환산되는 16진수로 취급하려면

8비트 중 가장 첫번째 비트가 부호로 환산되는 것을 무시해야 한다.

 

그 방법은 사진과 같다.

 

 

0xFF (11111111) 라는 Byte 를 AND 연산(둘 다 1일 때만 1) 해주면

값은 동일하지만 4Byte 인 int 로 변환되면서

255까지 표현되는 것이다.

 

https://emflant.tistory.com/133