gpt4 book ai didi

java - Java中的十六进制转整数

转载 作者:IT老高 更新时间:2023-10-28 21:09:33 26 4
gpt4 key购买 nike

我正在尝试将十六进制字符串转换为整数。字符串十六进制是从散列函数 (sha-1) 计算出来的。我收到此错误:java.lang.NumberFormatException。我猜它不喜欢十六进制的字符串表示。我怎样才能做到这一点。这是我的代码:

public Integer calculateHash(String uuid) {

try {
MessageDigest digest = MessageDigest.getInstance("SHA1");
digest.update(uuid.getBytes());
byte[] output = digest.digest();

String hex = hexToString(output);
Integer i = Integer.parseInt(hex,16);
return i;

} catch (NoSuchAlgorithmException e) {
System.out.println("SHA1 not implemented in this system");
}

return null;
}

private String hexToString(byte[] output) {
char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
StringBuffer buf = new StringBuffer();
for (int j = 0; j < output.length; j++) {
buf.append(hexDigit[(output[j] >> 4) & 0x0f]);
buf.append(hexDigit[output[j] & 0x0f]);
}
return buf.toString();

}

例如,当我传递这个字符串时:_DTOWsHJbEeC6VuzWPawcLA,他的哈希值是:0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15

但我得到:java.lang.NumberFormatException:对于输入字符串:“0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15

我真的需要这样做。我有一组由它们的 UUID 标识的元素,它们是字符串。我将不得不存储这些元素,但我的限制是使用整数作为它们的 id。这就是为什么我计算给定参数的哈希值,然后将其转换为 int。也许我做错了,但有人可以给我一个建议来正确地实现它!

感谢您的帮助!!

最佳答案

你为什么不为此使用 java 功能:

如果您的数字很小(比您的小),您可以使用:Integer.parseInt(hex, 16) 将十六进制 - 字符串转换为整数。

  String hex = "ff"
int value = Integer.parseInt(hex, 16);

对于像你这样的大数字,使用 public BigInteger(String val, int radix)

  BigInteger value = new BigInteger(hex, 16);

@见JavaDoc:

关于java - Java中的十六进制转整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com