int 에 두개 숫자를 넣기
한 int 에 두개 숫자를 넣어 보낼 필요가 생겼습니다
int 는 4byte, 32byte 이므로 16byte 씩 2개로 나눈다면 65536 이내의 숫자라면 2개는 넉넉히 보낼 수 있습니다.
하지만 난 한 숫자가 50만이 넘어가는 경우였기 때문에, 8byte 와 24byte 로 나누어서 보내야 합니다.
bitwise operator
bitwise operator 를 이해할 필요가 있습니다.
위 그림은 char, 1byte, 8bit 를 기준으로 했습니다.
메모리 크기는 그대로인데, 비트 array 를 화살표 방향으로 옮긴다고 생각하면 편합니다.
encoding
encoding 하는 부분은 다음과 같습니다.
startActivityForResult(i, cmdMsgIdEncoder(REQ_SHOOT, msgId));
원래 보내는 REQ_SHOOT 명령어 안에 필요한 긴 숫자인 msgId 를 encoding 해서 보내는 구조입니다
encoding 하는 함수는 다음과 같습니다
int cmdMsgIdEncoder (int cmd, int msgId) {
return ( cmd | msgId << 8 );
}
cmd 그리고 pipe 로 이은다음 msgId 를 8bit 만큼 옮긴 다음 붙여서 보내는 구조입니다.
decoding
다음은 decoding 하는 부분입니다.
int reqCode = requestCode & 0xFF;
int msgId = (requestCode >> 8) & 0xFFFFFF;
F 는 hexadecimal 로 16을 의미하고 이는 4bit 이기에 0xFF 는 8bit 를 의미하며, 모두 1로 rearrange 되어있는 것을 의미합니다.
즉 0xFF = 11111111 를 의미합니다.
여기서 and 연산자를 사용한다면
requestCode & 0xFF 는 requestCode 앞쪽 8bit 를 뽑아오겠다! 는 의미입니다.
시작지점은 8bit 만큼 옮기고, 아까완 달리 24bit의 1과 and 연산을 한다면 뒤쪽 24bit의 숫자를 읽어오겠다는 의미입니다.
'개발 > Java' 카테고리의 다른 글
[Java] bytetohex hextobyte 코드 (0) | 2023.04.11 |
---|---|
[Android, Java] Main Thread에서 sub Thread 로 값 넘겨주기 (0) | 2023.04.10 |
[Java] 추상화란 (0) | 2023.03.03 |
[Java] 상속(Inheritance) 이란, super 란 (0) | 2023.03.03 |
[Java] 다형성(polymorphism) 이란 (0) | 2023.03.03 |