Javaでbyte型を16進数文字列に変換する方法をまとめてみました。
目次
環境
- JDK 12 (OpenJDK)
- JAXB API 2.3.1
- Apache Commons Codec 1.12
String.format
Stringクラスのformatメソッドを使う方法。Java標準のAPIなので、ライブラリの追加は不要。
byte[] bytes = "あいうえお".getBytes();
// String.formatで出力 - 英字は小文字
for (byte b : bytes) {
System.out.print(String.format("%02x", b));
}
System.out.print("\n");
// String.formatで出力 - 英字は大文字
for (byte b : bytes) {
System.out.print(String.format("%02X", b));
}
System.out.print("\n");
出力
e38182e38184e38186e38188e3818a
E38182E38184E38186E38188E3818A
JAXB API - DatatypeConverter
JAXBのDatatypeConverterクラスを使う方法。JAXBはJava EEのAPIの一種なので、Java SEでこのクラスを使うのであれば、JAXB APIのライブラリが必要。
// DatatypeConverterで出力
System.out.println(DatatypeConverter.printHexBinary(bytes));
出力
E38182E38184E38186E38188E3818A
必要なライブラリ
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
Apache Commons Codec - Hex
Apache Commons CodecのHexクラスを使う方法。
// Apache Commons CodecのHexクラスで出力
System.out.println(Hex.encodeHex(bytes));
出力
e38182e38184e38186e38188e3818a
必要なライブラリ
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.12</version>
</dependency>