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

C와 안드로이드 소켓통신

0 추천
byte[] recv = new byte[1024];
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
String tt = (new String(recv,  "utf-8")) ;
Log.d(TAG1, "77777777777 - > " + tt);
mTv_data.setText(tt);

C(서버)에서 안드로이드(클라이언트)로 구조체 값을 바이너리형식으로 넘겨주고 있습니다.

구조체에는 double형과 float형이 있고요..

안드로이드에서는 BufferedInputStream으로 값을 받아서 textview에 뿌려줬는데 값이 깨져서 나오네요..

값을 받을때 바이너리형식을 각각의 변수타입에 맞게 형변환해야한다고 하던데...

형변환해서 각각의 값을 textview에 뿌려주려면 어떻게 해야할까요?? 관련 자료좀 부탁드립니다.

 

황금 (180 포인트) 님이 2014년 11월 4일 질문

2개의 답변

0 추천
java 에서는 구조체를 지원하지 않으니 바이너리형식으로 받아

보낸 순서 크기에 따라 잘라서 double형 float형으로 변환  사용하면 됩니다
서영아빠 님이 2014년 11월 4일 답변
잘라서 double형으로 변환하는 방법을 잘 모르겠네요..ㅠ 혹시 관련된 예제같은거 없을까요?
0 추천
double, float의 크기에 따라 잘라서  따로 byte 배열에 담습니다.

일반적으로 double 8bytes, float 4bytes입니다.

이때 전송된 데이터의 엔디안도 확인하고 순서를 맞추어줘야 됩니다.

 

그후 아래처럼 각 타입에 맞게 변환하면 될거 같네요..

ByteBuffer.wrap(bytes).getDouble();
isul (7,920 포인트) 님이 2014년 11월 4일 답변
ByteBuffer.wrap(bytes).getDouble();로 했더니
값이 좀 이상하게 나오는거같아요..
1.2932619013956744E-231  이런식으로 나옵니다.
보낸 dobule 값을 hex 코드로 변환하여 bytes에 저장된 값과 비교해보세요..
...