1. ホーム
  2. java

[解決済み] Javaで、バイト配列を先頭のゼロを維持したまま16進数の文字列に変換するにはどうしたらいいですか?[重複しています]。

2022-04-23 08:21:20

質問内容

md5ハッシュを作成するためのJavaコードのサンプルを作っているところです。ある部分は、結果をバイトから16進数の文字列に変換しています。

byte messageDigest[] = algorithm.digest();     
StringBuffer hexString = new StringBuffer();
for (int i=0;i<messageDigest.length;i++) {
    hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
    }

しかし、toHexStringはどうやら先頭のゼロを落としてしまうようなので、なかなかうまくいきません。そこで、バイト配列から16進文字列へ、先頭のゼロを維持したまま移動する最も簡単な方法は何でしょうか?

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

で何桁まで出力されるかを確認するのが簡単な方法です。 Integer.toHexString() で、必要なら各バイトに先頭の0を追加する。このようなものです。

public static String toHexString(byte[] bytes) {
    StringBuilder hexString = new StringBuilder();

    for (int i = 0; i < bytes.length; i++) {
        String hex = Integer.toHexString(0xFF & bytes[i]);
        if (hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }

    return hexString.toString();
}