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>