HOWTO · Java

Java で文字列を 16 進数に変換する

この記事では、Java で文字列を 16 進数に変換する方法について説明します。

このページの内容

この記事では、以下に例を示した 4つの方法を使用して、文字列を 16 進値に変換する方法を学習します。

char と Integer.toHexString() の配列を使用して文字列を 16 進数に変換する

最初の手法では、文字列を char の配列に変換します。まず、16 進値の文字列全体を作成するために文字を追加するために使用する StringBuilder() のオブジェクトを作成します。文字列を char 配列に変換するには、toCharArray() コマンドを使用します。その後、拡張ループと、引数として単一の char を受け入れる Integer.toHexString() メソッドを使用します。

関数 Integer.toHexString() は、char を 16 進数に変換し、stringBuilder.append() メソッドを使用して文字列を追加し、出力に表示します。

public class StringToHex {
  public static void main(String[] args) {
    String stringToConvert = "This is a string";

    convertStringToHex(stringToConvert);
  }

  private static void convertStringToHex(String str) {
    StringBuilder stringBuilder = new StringBuilder();

    char[] charArray = str.toCharArray();

    for (char c : charArray) {
      String charToHex = Integer.toHexString(c);
      stringBuilder.append(charToHex);
    }

    System.out.println("Converted Hex from String: " + stringBuilder.toString());
  }
}

出力:

Converted Hex from String: 54686973206973206120737472696e67

バイトの配列と文字列フォーマッタを使用して文字列を 16 進数に変換する

この例では、最初に getBytes() 関数を使用して文字列をバイトの配列 getBytesFromString に変換します。getBytes() メソッド内の文字セットを引数として渡す必要があります。バイト配列を取得したら、BigInteger のオブジェクトを作成し、コンストラクターで、int 値 1 とバイト配列を引数として渡します。

String.format() メソッドを使用して、bigInteger オブジェクトの値を 16 進文字列にフォーマットします。16 進文字列を取得したら、それを出力します。

import java.math.BigInteger;
import java.nio.charset.StandardCharsets;

public class StringToHex {
  public static void main(String[] args) {
    String stringToConvert = "We have to convert this string to hex";

    convertStringToHex(stringToConvert);
  }

  private static void convertStringToHex(String str) {
    byte[] getBytesFromString = str.getBytes(StandardCharsets.UTF_8);
    BigInteger bigInteger = new BigInteger(1, getBytesFromString);

    String convertedResult = String.format("%x", bigInteger);

    System.out.println("Converted Hex from String: " + convertedResult);
  }
}

出力:

Converted Hex from String: 5765206861766520746f20636f6e76657274207468697320737472696e6720746f20686578

Apache Commons コーデックを使用して文字列を 16 進数に変換する

文字列を 16 進 Java に変換する最後の方法では、Apache CommonsCodec ライブラリを使用します。プロジェクトにライブラリを含めるために、次の Maven 依存関係を使用します。

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

最後の例のように、このプログラムで変換する文字列から byte の配列を取得します。次に、Apache Commons-Codec ライブラリの Hex クラスを使用し、その静的メソッド encodeHexString() を呼び出して、引数として byteArray を渡します。次に、16 進数に変換される文字列を取得します。

encodeHexString() の代わりに関数 encodeHex() を使用できますが、文字列に変換する必要のある char 配列が返されます。ただし、結果は同じになります。

import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.binary.Hex;

public class StringToHex {
  public static void main(String[] args) {
    String stringToConvert = "We have to convert this string to hex";

    convertStringToHex(stringToConvert);
  }

  private static void convertStringToHex(String str) {
    byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
    String convertedResult = Hex.encodeHexString(byteArray);

    System.out.println("Converted Hex from String: " + convertedResult);
  }
}

出力:

Converted Hex from String: 5765206861766520746f20636f6e76657274207468697320737472696e6720746f20686578