안녕하세요. 초보 개발자 입니다.

다름이 아니라.

디바이스 단에서 특정 값을 받아 오는데요

16진수로 받아 와서 값을 비트 마스크 하여

특정 아이템의 색이나 글을 바꿔 주거나 하는건데요.

디바이스에서

0x85
라든지
0xFF
0xFE
이렇게 8비트 값을 받아 와요.

그럼 제가 만든 java 프로그램에서 그 8비트를 계산하는 방법 인데요.

통신을 통하여 String 버퍼 에 값을 받아와 헥사 값으로 변환하여
char 배열에 저장을 합니다.
여기까지는 아무 이상없이10진수로 자동 변환되어 받아 지는 값을 다시 핵사 값으로 바꾸는거에 성공은 하였습니다.

 char[]  val = Integer.toHexString(Integer.parseInt(sb.toString())).toCharArray();
byte val1 = 0, val2 = 0;
val1 = (byte) val[0];



이렇게 받아 온 값을 val1 이라는 byte 타입의 변수에 저장을 하고요

 /*
if ((val1 & 0x01)>0){       //여기서 비트 마스크로 해당 비트가 0 인지 1 인지 구분합니다.
bit_bt(m_dDemo.b1, true);  //여기서는 해당 메서드를 호출하여 버튼과 블린값을 주어 색을 변경하도록 했 
                                    고요.
 }else{ 
bit_bt(m_dDemo.b1, false);   //여기도 마찬가지 입니다. 해당 비트가 0일때는 false 를 주는거지요.
}
*/
if ((val1 & 0x01)>0){ bit_bt(m_dDemo.b1, true); }else{ bit_bt(m_dDemo.b1, false);}
if ((val1 & 0x02)>0){ bit_bt(m_dDemo.b2, true); }else{ bit_bt(m_dDemo.b2, false);}
  
if ((val1 & 0x04)>0){ bit_bt(m_dDemo.b3, true); }else{ bit_bt(m_dDemo.b3, false);}
  
if ((val1 & 0x08)>0){ bit_bt(m_dDemo.b4, true); }else{ bit_bt(m_dDemo.b4, false);}



 

이렇게 코드를 짜고 난 뒤에 10 이하의 값이 들어오면 비트마스크가 정상 처리가 되는데

10 이상 

A,B,C,D,E,F
값이 들어오면 비트 연산이 제대로 되지 않습니다.

왜그런지 혹시 아시는분 있으신가요?