HEX文字列(16進数バイト文字列)の変換
文字列との変換
DatatypeConverterを使用すると良いです。
// 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メソッドにて変換後、キャストするとマイナスになります。
// 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)はない模様。