아래는 4개의 길이를 갖는 byte 배열을 int 로 바꾸거나 int 를 4개의 길이를 갖는 byte 배열로 바꾸는 것이다.
// 아래의 방법 외에 다음과 같이 간단한 방법도 존재한다. :
// byte[] byteArray = ByteBuffer.allocate(4).putInt(value).array(); public byte[] intToByteArray(int value) { byte[] byteArray = new byte[4]; byteArray[0] = (byte)(value >> 24); byteArray[1] = (byte)(value >> 16); byteArray[2] = (byte)(value >> 8); byteArray[3] = (byte)(value); return byteArray; } public int byteArrayToInt(byte bytes[]) { return ((((int)bytes[0] & 0xff) << 24) | (((int)bytes[1] & 0xff) << 16) | (((int)bytes[2] & 0xff) << 8) | (((int)bytes[3] & 0xff))); }이 코드는 자바 기준으로 작성되어 있어 big endian 방식으로 되어있는데, x86 계열에서 컴파일되는 C 에서는 little endian 방식으로 바꿔야한다. 예를들어 위 코드에서 배열 인덱스 순서만 0,1,2,3 에서 3,2,1,0 순으로 바꿔주기만 하면 된다. 아래와 같이 말이다.byteArray[3] = (byte)(value >> 24);byteArray[2] = (byte)(value >> 16);byteArray[1] = (byte)(value >> 8);byteArray[0] = (byte)(value);
이제 위에 예제를 이용하여 Byte Array to Float, Float to Byte Array 로 변환하는 함수를 만들어 보겠다.public byte[] floatToByteArray(float value) { int floatValue = Float.floatToIntBits(value); return intToByteArray(floatValue); } public float byteArrayToFloat(byte bytes[]) { int value = byteArrayToInt(bytes); return Float.intBitsToFloat(value); }역시 JAVA 가 여러모로 편하다.C/C++ 에서는 float -> int 주소를 포인터 캐스팅 하는 방법으로 아주 쉽게 바꿀 수 있는데, 환경에 따라서 불가능할수도 있다. 그럴 경우에는 아주 조금 번거롭게 변경해야 한다. 이 부분에 대하여 다음에 다뤄보겠다.
출처: https://dev.re.kr/24 [Dev.re.kr]
댓글 없음:
댓글 쓰기