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

블루투스 data 통신 질문 드립니다.

0 추천
안녕하세요 .

블루투스와 보드간 데이터 통신을 하려고 앱 개발 중입니다.

블루투스에서 보드로 데이터를 write 할때 outputstream.write()

함수를 사용하려고 합니다.

하지만 write함수는 byte[] 을 인자값으로 가져서 값이 범위가 -128 ~127까지 밖에 되지 않습니다.

0~254 까지의 값을 보내야 하는데 android에서는 unsingned를 허용 하지 않습니다.

0~254까지 값을 보낼수 있는 방법이 있을까요??

알려 주세요...
깡갱 (660 포인트) 님이 2015년 3월 6일 질문

3개의 답변

+1 추천
해당 byte[]을 보내 보셨나요?

java에서 보기에는 -128 이어도 실제 bit로 보면 10000000 로 되어있습니다.

 

전송도중 변형만 안된다면 받는쪽에서 unsigned로 처리하고있다면 0~255값으로 처리가 될것 같은데요.
이라슈 (8,770 포인트) 님이 2015년 3월 6일 답변
아라슈님 말씀대로입니다. 자바에서 -128로 보내도 데이터 자체가 비트로 되있어서 받는쪽에서 자기가 알아서 처리합니다. 질문자님이 unsingned로 왜 고민을 하시는지 모르겠네요.
감사합니다.
받는쪽에서 제대로 처리하는줄 몰랐네요..
큰도움 받아갑니다. ^^
0 추천
-128한 값을 보내고 받는쪽에서 +128하세요.
익명사용자 님이 2015년 3월 6일 답변
받는 쪽에서 변경 할 수 없고 보는쪽에서만 가능한 방법은 없을까요?
받는 쪽은 변경하기 힘든 상황입니다.
0 추천

byte는 0-255 되어야 하는건 당연한 것입니다

이게 안된다면 이미지(byte array)를 어떻게 보내며 파일을 어떻게 보내겠습니까

단지 그것을 화면에 출력할때에 signed 로 보여서 문제일것인데

아래처럼 해결을 해보세요

 

int i = 200;
byte b = (byte)200;
 
// Will print a negative value but you could *still choose to interpret* this as +200.
System.err.println(b); 
 
// "Upcast" to short in order to easily view / interpret as a positive value.
// You would typically do this *within* the method that expected an unsigned byte.
short s = b & 0xFF;
System.err.println(s); // Will print a positive value.
 
다음은 송수신 방법 입니다
 
void sendFile(Uri uri, BluetoothSocket bs) throws IOException
{
    try
    {
        BufferedInputStream bis = new BufferedInputStream(getContentResolver().openInputStream(uri));
        OutputStream os = bs.getOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];
 
        // we need to know how may bytes were read to write them to the byteBuffer
        int len = 0;
        while ((len = inputStream.read(buffer)) != -1)
        {
            os.write(buffer, 0, len);
        }
    }
    finally
    {
        if(bis != null)
            bis.close();
    }
}
 
 
블루투스를 이용하여 바이트 통신은 아주 쉽게 0-255(1바이트당) 까지 보낼수 있습니다
 
 
 
 
doridori2013@nate.com
 
 
익명사용자 님이 2015년 3월 6일 답변
도움 감사합니다. ^^
...