当前位置: 首页 > 知识库问答 >
问题:

BigInteger。toString方法正在删除前导0

秦新立
2023-03-14

我正在尝试使用MessageDigest生成MD5 sum。我有以下代码。

byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
output = bigInt.toString(16);

它返回的不是32个字符的字符串,而是31个字符的字符串

预期的字符串是08611c0b0832bce5a19ceee626a403a7

输出中缺少前导0。

我试过另一种方法

byte[] md5sum = digest.digest();
output = new String(Hex.encodeHex(md5sum));

并且输出和预期的一样。

我检查了文档,我nteger.toString根据它进行转换

字符提供的数字到字符的映射。使用forDigit,如果合适,在前面加一个减号。

在性格上。数字方法

如果0,则数字参数有效

有人能告诉我两种方法有什么不同吗?为什么删除前导0?

共有3个答案

长孙沈义
2023-03-14

根据BigInteger,删除它是因为前导零不重要。27和0000000000 27之间没有区别。

如果你想要一个特定的长度,你必须自己强迫它,比如:

output = ("00000000000000000000000000000000"+output).substring(output.length());

(尽管这很糟糕)。

彭胡媚
2023-03-14

String.format("4X",新的大整数(1,ByteArray);

在哪里

  1. 0-零前导符号
  2. 64-字符串长度
  3. X-大写
  4. ByteArray-您要在其上运行此操作的ByteArray
蒋默
2023-03-14

我个人会避免使用BigIntger将二进制数据转换为文本。这并不是它的真正用途,即使它可以用于此目的。有大量代码可用于将byte[]转换为其十六进制表示-例如使用Apache Commons Codec或简单的单一方法:

private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
public static String toHex(byte[] data) {
    char[] chars = new char[data.length * 2];
    for (int i = 0; i < data.length; i++) {
        chars[i * 2] = HEX_DIGITS[(data[i] >> 4) & 0xf];
        chars[i * 2 + 1] = HEX_DIGITS[data[i] & 0xf];
    }
    return new String(chars);
}
 类似资料:
  • 问题内容: 我正在尝试使用MessageDigest生成MD5总和。我有以下代码。 这不会返回32个字符串,而是一个31个字符串 预期的字符串是 输出中缺少前导0。 我尝试了另一种方法 和输出是预期的。 我检查了文档,然后Integer.toString根据它进行转换 使用Character.forDigit提供的数字到字符的映射,并在适当时添加减号。 在Character.forDigit方法中

  • 问题内容: 我想删除十进制数字中的前导零。 所以我想输出应该是 没有 。我尝试过不工作,我也尝试过正则表达式!没有结果!是的,我正在使用BigDecimal。 问题答案: 试试这个

  • 问题内容: 我有一个以许多空格开头的文本字符串,介于2和4之间。 删除前导空格的最简单方法是什么?(即删除某个字符之前的所有内容?) 问题答案: 该方法将删除以字符串开头的前导空格,换行符和制表符: 编辑 正如balpha在注释中指出的那样,为了 仅从 字符串开头删除空格,应使用:

  • 本文向大家介绍Oracle删除archivelog文件的正确方法,包括了Oracle删除archivelog文件的正确方法的使用技巧和注意事项,需要的朋友参考一下 Oracle在开启了归档模式后,会在指定的archive目录下产生很多的archivelog文件,而且默认是不会定期清除的,时间长久了,该文件夹会占用很大的空间。 问题:如何定期正确删除archivelog文件呢? 很多人直接在arch

  • 本文向大家介绍Java toString()方法。,包括了Java toString()方法。的使用技巧和注意事项,需要的朋友参考一下 String类的toString()方法将自身返回为字符串。 示例 输出结果

  • 问题内容: 我很难尝试将.strip与以下代码行结合使用。 谢谢您的帮助。 问题答案: 您可以使用strip()删除尾随和前导空格。 注意:内部空间被保留