Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで文字列と16進数を相互に変換する方法を解説

文字列を16進数(Hexadecimal)に変換する

Javaでは、IntegerクラスのtoHexString()メソッドを使うと、整数を引数として渡すだけで16進数表記の文字列を取得できます。このメソッドを利用して、文字列全体を16進数に変換する手順は以下のとおりです。

  • 対象となる文字列を用意します。
  • 空のStringBufferオブジェクトを作成します。
  • StringクラスのtoCharArray()メソッドで、文字列をchar型の配列に変換します。
  • ループ処理で、配列の各要素を順番に取り出します。
  • ループ内で各文字をint型に変換し、その値をInteger.toHexString()メソッドに渡して16進数文字列を取得します。
  • StringBufferクラスのappend()メソッドで、変換結果を順次連結していきます。
  • 最後にtoString()メソッドで、StringBufferオブジェクトを通常の文字列に変換して完成です。

コード例

import java.util.Scanner;

public class StringToHexadecimal {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("文字列を入力してください: ");
        String str = sc.next();
        StringBuffer sb = new StringBuffer();
        // 文字列をchar型の配列に変換
        char ch[] = str.toCharArray();
        for(int i = 0; i < ch.length; i++) {
            String hexString = Integer.toHexString(ch[i]);
            sb.append(hexString);
        }
        String result = sb.toString();
        System.out.println(result);
    }
}

実行結果

文字列を入力してください:
Tutorialspoint
5475746f7269616c73706f696e74

この例では、「Tutorialspoint」という文字列が「5475746f7269616c73706f696e74」という16進数表記に変換されています。たとえば先頭の「54」は、文字「T」のUnicodeコードポイント(U+0054)に対応しています。

補足: 上記の方法は1文字ずつ(UTF-16のコードユニット単位)で変換するため、日本語などのマルチバイト文字を扱う場合は、getBytes("UTF-8")でバイト配列に変換してから各バイトを16進数化する方法が推奨されます。

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

逆に、16進数表記の文字列を元の文字列に戻す場合も、基本的な考え方は同じです。以下の手順で変換できます。

  • 16進数の値(文字列)を取得します。
  • toCharArray()メソッドで、char型の配列に変換します。
  • 配列から2文字ずつ読み取り、部分文字列を作成します。
  • その部分文字列をInteger.parseInt(文字列, 16)で基数16の整数としてパースし、char型にキャストします。
  • すべての文字を連結して、元の文字列を復元します。

コード例

import java.util.Scanner;

public class HexadecimalToString {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("16進数の値を入力してください: ");
        String str = sc.next();
        String result = new String();
        char[] charArray = str.toCharArray();
        for(int i = 0; i < charArray.length; i=i+2) {
            String st = ""+charArray[i]+""+charArray[i+1];
            char ch = (char)Integer.parseInt(st, 16);
            result = result + ch;
        }
        System.out.println(result);
    }
}

実行結果

16進数の値を入力してください:
5475746f7269616c73706f696e74
Tutorialspoint

16進数の各2桁が1文字に対応しているため、ループは2文字ずつ進める点に注意してください。また、大量の文字列を扱う場合は、文字列連結(+演算子)の代わりにStringBuilderやStringBufferを使うことで、パフォーマンスを向上させることができます。

  1. NumPyのndarrayとPyTorchのTensorを相互変換する方法をわかりやすく解説

    PyTorchのテンソル(Tensor)は、numpy.ndarrayに非常によく似たデータ構造です。両者の大きな違いは、テンソルがGPUを活用して数値計算を高速化できる点にあります。numpy.ndarrayからPyTorchテンソルへの変換にはtorch.from_numpy()関数を使用し、逆にPyTorchテンソルからnumpy.ndarrayへの変換には.numpy()メソッドを使用します。変換の手順必要なライブラリをインポートします。ここではtorchとnumpyが必要です。numpy.ndarrayまたはPyTorchテンソルを作成します。torch.from_numpy()関数

  2. GoogleドキュメントをMicrosoft Word(.docx)に変換する方法【逆パターンも解説】

    Googleドキュメントは、アクセスや共有、文書への署名が手軽に行えることから、多くのユーザーに愛用されているサービスです。しかし、オフラインでの利用や他ツールとの互換性を考えると、DOCXといった定番フォーマットが必要になる場面もあります。Googleドキュメントに保存したファイルのオフラインコピーが必要な場合は、Microsoft Word形式への変換がとても簡単に行えます。本記事ではその逆の手順、つまりWord文書(.docx)をGoogleドキュメント形式に変換して開く方法についても併せてご紹介します。注意:GoogleドキュメントからWordへの変換は可能ですが、変換時に元の書式が完