강좌 & 팁
글 수 2,412
2012.06.02 17:19:52 (*.52.177.29)
82105
네트워크 프로그램을 하다보면 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
- 상위바이트부터 왼쪽에 저장되는 방식
실행 결과를 보시면 좀 알겠죠!!
[실행결과]
감사합니다.