Javaで16進数をASCIIに変換

Javaで16進数をASCIIに変換する

1. 概要

この簡単な記事では、16進形式とASCII形式の間でいくつかの簡単な変換を行います。

典型的な使用例では、Hex形式を使用して、非常に大きな整数値をコンパクトな形式で書き留めることができます。 たとえば、AD45は10進数の44357よりも短く、値が大きくなると長さの差がさらに顕著になります。

2. ASCIIから16進数

それでは、ASCII値を16進数に変換するオプションを見てみましょう。

  1. 文字列を文字配列に変換

  2. charintにキャストします

  3. Integer.toHexString()を使用して16進数に変換します

上記の手順を実行する方法の簡単な例を次に示します。

private static String asciiToHex(String asciiStr) {
    char[] chars = asciiStr.toCharArray();
    StringBuilder hex = new StringBuilder();
    for (char ch : chars) {
        hex.append(Integer.toHexString((int) ch));
    }

    return hex.toString();
}

3. 16進数からASCII形式

同様に、3つのステップで16進数からASCII形式への変換を行いましょう。

  1. 16進値を2charグループにカットします

  2. Integer.parseInt(hex, 16)を使用して基数16の整数に変換し、charにキャストします

  3. すべての文字をStringBuilderに追加します

上記の手順を実行する方法の例を見てみましょう。

private static String hexToAscii(String hexStr) {
    StringBuilder output = new StringBuilder("");

    for (int i = 0; i < hexStr.length(); i += 2) {
        String str = hexStr.substring(i, i + 2);
        output.append((char) Integer.parseInt(str, 16));
    }

    return output.toString();
}

4. Test

最後に、これらの方法を使用して、簡単なテストを行いましょう。

@Test
public static void whenHexToAscii() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(asciiString, hexToAscii(hexEquivalent));
}

@Test
public static void whenAsciiToHex() {
    String asciiString = "www.example.com";
    String hexEquivalent =
      "7777772e6261656c64756e672e636f6d";

    assertEquals(hexEquivalent, asciiToHex(asciiString));
}

5. 結論

最後に、Javaを使用してASCIIとHexの間で変換する最も簡単な方法を検討しました。

これらすべての例とコードスニペットの実装はin the github projectにあります。プロジェクトをインポートして、そのまま実行するだけです。