네트워크 프로그램을 하다보면 int를 byte배열로 변환 하던가 그반대에 경우가 많이 생깁니다.

그런경우가 없다면 편하겠지만, 그렇지 않은경우가 대부분이기 때문에 변환을 해야 합니다.


소스는 간단하고 좀더 편하게 사용할 수 있는 방법은 없을까?

딱 두가지 방법이 있더군요. ByteBuffer를 사용하는 방법과 비트연산을 통한 변환 방법

전 머리가 안좋아서 비트연산은 패스 하고 ByteBuffer를 통한 변환 방법을 소개 할까 합니다.

소개라기보단 샘플소스입니다.



import java.nio.ByteBuffer;
import java.nio.ByteOrder;
 
/**
 * @author falbb
 *
 */
public class IntByteConvert {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
 
		int testInt = 1025;
 
		System.out.println("===== ByteOrder.LITTLE_ENDIAN  ===");
	    byte[] bytes = intTobyte(testInt, ByteOrder.LITTLE_ENDIAN);
 
	    for (int i = 0; i < bytes.length; i++) {
			System.out.printf("[%02X]", bytes[i]);
		}
		System.out.println();
		System.out.println(byteToInt(bytes, ByteOrder.LITTLE_ENDIAN));
 
		System.out.println();
		System.out.println("===== ByteOrder.BIG_ENDIAN  ===");
	    bytes = intTobyte(testInt, ByteOrder.BIG_ENDIAN);
 
	    for (int i = 0; i < bytes.length; i++) {
			System.out.printf("[%02X]", bytes[i]);
		}
		System.out.println();
		System.out.println(byteToInt(bytes, ByteOrder.BIG_ENDIAN));
	}
 
 
	/**
	 * int형을 byte배열로 바꿈<br>
	 * @param integer
	 * @param order
	 * @return
	 */
	public static byte[] intTobyte(int integer, ByteOrder order) {
 
		ByteBuffer buff = ByteBuffer.allocate(Integer.SIZE/8);
		buff.order(order);
 
		// 인수로 넘어온 integer을 putInt로설정
		buff.putInt(integer);
 
		System.out.println("intTobyte : " + buff);
		return buff.array();
	}
 
	/**
	 * byte배열을 int형로 바꿈<br>
	 * @param bytes
	 * @param order
	 * @return
	 */
	public static int byteToInt(byte[] bytes, ByteOrder order) {
 
		ByteBuffer buff = ByteBuffer.allocate(Integer.SIZE/8);
		buff.order(order);
 
		// buff사이즈는 4인 상태임
		// bytes를 put하면 position과 limit는 같은 위치가 됨.
		buff.put(bytes);
		// flip()가 실행 되면 position은 0에 위치 하게 됨.
		buff.flip();
 
		System.out.println("byteToInt : " + buff);
 
		return buff.getInt(); // position위치(0)에서 부터 4바이트를 int로 변경하여 반환
	}
}


ByteOder은 각자에 맞게 설정해 주시면됩니다.

리틀인디언:ByteOrder.LITTLE_ENDIAN

- 하위바이트부터 왼쪽에 저장되는 방식


빅인디언 : ByteOrder.BIG_ENDIAN

- 상위바이트부터 왼쪽에 저장되는 방식


실행 결과를 보시면 좀 알겠죠!!


[실행결과]

intTobyte.png  



감사합니다.