Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 16진수 문자열을 바이트 배열로 변환하는 방법

Java에서 16진수 문자열을 바이트 배열로 변환하려면 먼저 Integer 클래스의 parseInt() 메서드를 사용하여 16진수를 10진수 정수 값으로 변환합니다. 이어서 BigInteger 클래스의 toByteArray() 메서드를 호출하면 최종적으로 바이트 배열을 얻을 수 있습니다.

변환 과정

전체 변환 절차는 다음 세 단계로 정리할 수 있습니다.

  1. parseInt() 메서드에 변환할 문자열과 진수(16)를 인자로 전달하여 16진수 문자열을 10진수 정수로 변환합니다.
  2. BigInteger.valueOf() 메서드를 사용해 해당 정수 값을 BigInteger 객체로 만듭니다.
  3. toByteArray() 메서드를 호출하여 바이트 배열을 반환받습니다.

예제 코드

import java.math.BigInteger;

public class Demo {
   public static void main(String args[]) {
      String str = "1D08A";
      int it = Integer.parseInt(str, 16);
      System.out.println("Hexadecimal String " + str);
      BigInteger bigInt = BigInteger.valueOf(it);
      byte[] bytearray = bigInt.toByteArray();
      System.out.print("Byte Array : ");
      for (int i = 0; i < bytearray.length; i++)
         System.out.print(bytearray[i] + "\t");
   }
}

실행 결과

Hexadecimal String 1D08A
Byte Array : 1 -48 -118

결과 해석

16진수 "1D08A"는 10진수로 118922이며, 이 값은 0x01, 0xD0, 0x8A의 세 바이트로 표현됩니다. Java의 byte 타입은 부호 있는(signed) 값이므로 0xD0은 -48, 0x8A는 -118로 출력됩니다. 또한 첫 번째 바이트가 1로 나타나는 이유는 toByteArray()가 부호 비트를 유지하기 위해 항상 최상위 바이트를 포함하기 때문입니다.

주의 사항: 큰 값 처리하기

Integer.parseInt()는 int 타입 범위(약 ±21억) 안의 값만 처리할 수 있습니다. 따라서 이보다 긴 16진수 문자열을 변환할 때는 아래와 같이 BigInteger 생성자를 직접 사용하는 방식이 안전하고 권장됩니다.

BigInteger bigInt = new BigInteger("1D08A", 16);
byte[] bytearray = bigInt.toByteArray();

이 방법은 int 범위를 초과하는 임의 길이의 16진수 문자열도 오버플로우 없이 처리할 수 있다는 장점이 있습니다.