java BigInteger。toString方法正在删除前导0
我正在尝试使用MessageDigest生成MD5 sum。 我有以下代码
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);
它返回的不是32个字符的字符串,而是31个字符的字符串8611c0b0832bce5a19ceee626a403a7
所需字符串为08611c0b0832bce5a19ceee626a403a7
输出中缺少前导0
我试过另一种方法
byte[] md5sum = digest.digest();
output = new String(Hex.encodeHex(md5sum));
并且输出与预期一致
我检查了文档和整数。toString根据它进行转换
The digit-to-character mapping provided by Character.forDigit is used, and a minus sign is prepended if appropriate.
在性格上。福迪吉特法
The digit argument is valid if 0 <=digit < radix.
有人能告诉我这两种方法有什么不同吗?为什么删除前导0
# 1 楼答案
删除的零将使用以下代码替换:
循环将根据需要解释尽可能多的前导零
# 2 楼答案
# 3 楼答案
根据
BigInteger
,删除它是因为前导零不重要。在27
和000000000027
之间没有区别如果你想要一个特定的长度,你必须自己强制,比如:
(尽管这是一个拙劣的说法)
# 4 楼答案
在哪里
# 5 楼答案
我个人会避免使用
BigInteger
将二进制数据转换为文本。这并不是它的真正目的,即使它可以被用来做这件事。有大量代码可用于将byte[]
转换为其十六进制表示形式,例如使用Apache Commons Codec或简单的单一方法: