본문 바로가기

Android/통신

[안드로이드 java] byte 배열 타입별로 변환하기 ― 수신 프로토콜 처리하기

728x90
반응형

 

 

 

TCP/IP통신 또는 Bluetooth 소켓 통신을 통해 약속한 형식에 맞는 프로토콜을 수신 받는데요.

보통 byte형 배열로 수신 받습니다. 

수신받은 데이터를 형식에 맞게 형변환하여 사용하여야 하는데요. 정리해 보겠습니다.

 

byte[] 저장 코드


ByteBuffer tmpbuf = ByteBuffer.wrap(BytesArray);
tmpbuf.rewind();
byte b1 = tmpbuf.get();
byte b2 = tmpbuf.get();

받은 byte array를 ByteBuffer를 사용하여 저장후,

position을 rewind();를 통해 옮깁니다.

그 후 get() 메서드를 사용하면 byte별로 하나하나 저장할 수 있습니다.

처음 헤더 2byte를 저장해주었습니다.

 

다음으로는 float형이나 String형의 경우 약속한 byte 갯수가 있을텐데요.

한꺼번에 ByteBuffer를 새로 만들어 받아줍니다.

ByteBuffer stringBuf = ByteBuffer.allocate(32); //32byte String
for(int k=0;k<32;k++){
   ssidbuf.put(tmpbuf.get());
}
 ByteBuffer floatBuf = ByteBuffer.allocate(4); //4byte Float
    for(int k=0;k<4;k++){
         pwbuf.put(tmpbuf.get());
}

헤더 2byte다음에 32byte String, 4byte Float형으로 약속한 프로토콜을 각각 저장시킵니다.

get안에 특정 index를 넣어 저장할 수도 있습니다.

 


 

byte → Hex String으로 출력해보기


System.out.println("header1 : " + String.format("%02x", b1) + "  header2 : " + String.format("%02x", b2) );

위에서 받은 header 2byte를 Hex string으로 출력해보았습니다.

 


 

byte[] → String 형변환


String str = new String(stringBuf.array(), "ASCII");
System.out.println("str : " + str );

위에서 저장한 String byte를 String으로 출력해보았습니다.

 


 

 

728x90
반응형