안녕하세요. 초보 개발자 입니다.
다름이 아니라.
디바이스 단에서 특정 값을 받아 오는데요
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
값이 들어오면 비트 연산이 제대로 되지 않습니다.
왜그런지 혹시 아시는분 있으신가요?
제대로 안됐어요 char 타입으로 넣었다가 안되서 byte 로 바꾼건데. 값도 변해 버리네요.
다시 char 로 바꿔놓았는데요.
char val = 0xF;
이런 식으로 넣으면 잘 되는데요
char val = val[0];
이면 또 안되네요.
같은 값을 넣은거 같은데요..;;
같은 값이 아니예요;;; 문자 '1'은 byte로 56이고, 문자 'a'는 byte로 97입니다..
위 소스에서 만약 들어온 값이 sb.toString()이면
Byte val1 = Byte.parseByte(sb.toString());
으로 변환하고 밑에 소스는 그대로 쓰시면 될거같네요.
통신에서 어떤 String값이 들어오나요? 0xAB이런 식으로 들어오는 건가요?
val1 = (byte)val[0];
이라고 되어있는데 문자를 byte으로 변환시키면 아스키코드값이 byte에 들어가게 될텐데.. 제대로 변환되었다니 좀 신기하네요.
val1값이 제대로 출력되는지 확인해보세요.