在Java中,如何在保持前导零的同时将字节数组转换为十六进制数字字符串?

2022-08-31 07:00:16

我正在使用一些示例java代码来制作md5哈希。一部分将结果从字节转换为十六进制数字字符串:

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

但是,它并不完全有效,因为toHexString显然会从前导零下降。那么,从字节数组到保持前导零的十六进制字符串的最简单方法是什么?


答案 1

查看Apache Commons编解码器Hex.encodeHexString

import org.apache.commons.codec.binary.Hex;

String hex = Hex.encodeHexString(bytes);

答案 2

您可以使用下面的那个。我用前导零字节和初始负字节对此进行了测试

public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes);
    return String.format("%0" + (bytes.length << 1) + "X", bi);
}

如果需要小写十六进制数字,请使用字符串格式。"x"