我正在尝试将String十六进制转换为整数。从哈希函数(sha-1)计算出十六进制字符串。我收到此错误:java.lang.NumberFormatException。我猜它不喜欢十六进制的String表示形式。我该如何实现。这是我的代码:
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)将十六进制-字符串转换为整数。
Integer.parseInt(hex, 16)
String hex = "ff" int value = Integer.parseInt(hex, 16);
对于像您这样的大数字,请使用 public BigInteger(String val, int radix)
public BigInteger(String val, int radix)
BigInteger value = new BigInteger(hex, 16);
@See JavaDoc: