1. ホーム
  2. java

[解決済み] 16進ダンプの文字列表現をバイト配列に変換する Javaを使用する?

2022-03-24 02:42:46

質問

私は、16進数の値を表す長い文字列(ダンプから)をバイト配列に変換する方法を探しています。

を投稿された方ほど、良い表現はないでしょう。 同じ質問をここで .

しかし、オリジナルを保つために、私なりの言い方をしますと、例えば、文字列 "00A0BF" として解釈してほしい。

byte[] {0x00,0xA0,0xBf}

どうすればいいのでしょうか?

私はJava初心者で、結局は BigInteger と、先頭の16進数ゼロに気をつける。しかし、私はそれが醜いと思うし、私はきっと何か単純なことを見逃している。

どのように解決するのですか?

アップデート(2021年)-。 ジャバ17 が含まれるようになりました。 java.util.HexFormat (25年かかっただけです)。

HexFormat.of().parseHex(s)


古いバージョンのJavaの場合。

これまでに投稿されたどの解決策よりも優れていると思われる方法を紹介します。

/* s must be an even-length string. */
public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

改善される理由

  • BigIntegerとは異なり先頭のゼロがあっても安全、Byte.parseByteとは異なり負のバイト値でも安全です。

  • Stringを char[] また、1バイトごとにStringBuilderとStringオブジェクトを生成します。

  • 使用できない可能性のあるライブラリの依存はありません

引数チェックは assert または、引数が安全かどうかわからない場合は例外が発生します。