HEX文字列(16進数バイト文字列)の変換

文字列との変換

DatatypeConverterを使用すると良いです。

weblabo.oscasierra.net

// HEX -> String
String hexString = "E38182E38184E38186E38188E3818A";
byte[] bytes = DatatypeConverter.parseHexBinary(hexString);
System.out.println(new String(bytes));

// String -> HEX
byte[] bytes = "あいうえお".getBytes();
String hexString = DatatypeConverter.printHexBinary(bytes);
System.out.println(hexString);

数値との変換

符号なし

各数値クラスのparseメソッドを使用します。

// 2Byte
int i = Integer.parseInt("FFFF",16);
// 65535

// 4Byte
long l = Long.parseLong("FFFFFFFF",16);
// 4294967295

符号あり

parseメソッドにて変換後、キャストするとマイナスになります。

stackoverflow.com

// 2Byte
short s = (short) Integer.parseInt("FFFF",16);

// 4Byte
int i = (int) Long.parseLong("FFFFFFFF",16);

// 8Byte
long l = Long.parseUnsignedLong("FFFFFFFFFFFFFFFF", 16);

// 結果は全部-1

4Byteと8Byteについては、Java 8だと以下のように書けます。

// 4Byte
int i = Integer.parseUnsignedInt("FFFFFFFF",16);

// 8Byte
long l = (Long.parseLong("FFFFFFFFF",16)<<32) | Long.parseLong("FFFFFFFF",16);

#Short.parseUnsignedShort(String, int)はない模様。