C에서 쓴 binary file을 Java에서 읽기위해서 온갖 삽질을 하다가..

- encoding문제인가 싶어서 온갖 encoding관련 검색을 하고 변경해봤지만 이건 아니고.
- Java에서 unsigned를 다루지 못해서 생긴 문제인가 싶어서 찾아봤지만 이것도 아니고.
- Big/little endian문제였다는것을 발견... 

Java에서는 Big endian으로만 데이터를 취급한다.
따라서 1) C에서 파일을 작성할때 Big endian으로 써주거나.
아니면 반대로 2) Java에서 읽을때 byte 를 거꾸로 읽어줘야 제대로 된 값을 가져올 수 있다.

나는 C에서 써주는 방법이 좀 더 간단하므로 이 방법을 택했음

1) C에서 작성하는 방법

 #include <arpa/inet.h>
 x = htonl(x);


2) Java에서 읽는 방법
( http://www.blah-blah.ch/it/programming/java-unsigned-int/ )

public static long readBytesLittle2Big(DataInputStream d, int iHowmany) throws IOException {
byte[] b = new byte[iHowmany];
ByteBuffer bb = ByteBuffer.allocate(iHowmany);
for (int x=0;x<iHowmany;x++)
{
b[x] = d.readByte();
}
/*Here I read stuff from disc which is saved in little endian order which I have to convert into big endian*/
for (int x=0;x<iHowmany;x++)
{
bb.put(iHowmany-1-x, b[x]);
}
bb.rewind();
return bb.getInt();
}



'Else' 카테고리의 다른 글

Repo recursive copy  (0) 2012.06.04
find 사용법  (0) 2012.02.22
블로그 이미지

민둥

,