마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 블루투스 통신시, byte데이터 설정

0 추천

안드로이드에서 블루투스로 데이터를 보내는 작업중,

데이터 세팅하는 부분에서

byte[] msg = new byte[12 + cmdDataSize];

        msg[0] = 0x02;        //STX

        msg[1] = 0x01;

 

이런식으로 세팅을 하는데 , msg[7] = 0xF1 은 자꾸 0xF1앞에 byte를 캐스팅 하라고 합니다.

이유가 뭔가요.

다른건 다 그냥 잘 들어갑니다....

쮸뿌쮸뿌 (2,470 포인트) 님이 2016년 1월 13일 질문

1개의 답변

0 추천
int a;

a = 10;

a = 0x0a;

위 코드들은 정상 동작합니다.

한마디로 0x99 이렇게 표기한 상수값이 그냥 숫자로 인식된다는 말입니다.

이쯤에서 올리신 코드로 돌아가보자면...

0xF1 값을 넣는다고 하셨는데...

0xF1 은 16진수이죠... 2진수로 바꾸면 11110001 입니다.

첫 비트 즉 사인드 자료형에서의 부호비트가 1 인 값입니다.(참고로 그냥 0xaa 이렇게 쓰면 일반적으로 int로 인식합니다.)

그러니 혼란을 막기 위해 사용자가 명시적으로 byte 형으로 캐스팅을 하라는 것입니다.
비애천사 (12,090 포인트) 님이 2016년 1월 13일 답변
아 이해했어요! 감사합니다.
한가지 더 여쭙고 싶은게 있는데, 제가 헥사값은 잘 몰라서요.
int 형인 dataLength를 (dataLength >>8)&0xff 하는건 무슨뜻인지 검색해 보아도 잘 모르겠네요ㅠㅠ.....알려주시면 안될까요
<<, >>, |, & 는 각각 비트연산자 입니다.
JAVA 비트연산자 로 검색해보시면 많은 예제와 설명을 찾을 수 있습니다.
간단하게 설명드리자면...
<< x : x비트만큼 왼쪽으로 쉬프트합니다.
>> x : x비트만큼 오른쪽으로 쉬프트합니다.
x | y : x와 y를 OR 연산을 합니다.
x & y : x와 y를 AND 연산 합니다.
...