ByteBuffer 이야기

플젝에서 윈도용을 안드로이드 포팅하고 있는데 C++에서는 8바이트 double 을 memcpy로 char[8] 에다가 그냥 복사하면 같은거였는데 자바에선 형이 다르다고 System.arrcopy던가에서 에러가 나는거다.

그래서 한참을 삽질하다가

public byte[] Int2Byte(int data){
  byte header[] = new byte[4];
  header[0] = (byte)((data& 0xff000000) >> 24);
  header[1] = (byte)((data& 0x00ff0000) >> 16);
  header[2] = (byte)((data& 0x0000ff00) >> 8);
  header[3] = (byte)(data & 0x000000ff);
  return header;
 }

 public int Byte2Int(byte[] data, int offset){
  int result = 0;
  for (int i=0; i<4; i++)
  {
   result += ((data[i+offset] & 0xFF) << ((3-i)*8));
  }
  return result;
 }

이런 코드로 변환해서 쓰다가 실수형은 대체 어떻게 해야 하는건지 한참을 고민하다가 알게된 것이 ByteBuffer

바이트 버퍼는 단순하다. 그냥 입력해주고 원하는 형태 메소드로 받으면 되기 때문이다.

double value = ByteBuffer.wrap(src, 0, 8).getDouble();

이런식이다.
byte[] src 에서 시작위치와 길이만큼 넣은뒤 getDouble로 받기만 하면 된다.

이걸 진작에 알았으면 하루이틀 삽질할 필요는 없었을텐데 ㅜ.ㅜ;


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다