我正在尝试将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)
将十六进制-字符串转换为整数。
String hex = "ff"
int value = Integer.parseInt(hex, 16);
对于像您这样的大数字,请使用 public BigInteger(String val, int radix)
BigInteger value = new BigInteger(hex, 16);
@See JavaDoc:
问题内容: 我有一个代表2的补码的十六进制字符串。是否有一种简单的方法(库/函数)将十六进制转换为十进制而不直接使用其位? EG这是给定左侧十六进制的预期输出: 谢谢! 问题答案: 这似乎在欺骗Java转换数字而不强制给出正结果: 当然,这种情况仅适用于8、16、32和64位2的补码:
问题内容: 我有一个家庭作业,需要在十进制,二进制和十六进制之间进行三向转换。我需要帮助的功能是将十进制转换为十六进制。我几乎不了解十六进制,但是如何将十进制转换为十六进制。我需要一个接受并返回的函数。不幸的是我没有此功能的任何草稿,我完全迷路了。我只有这个。 另外,我不能使用诸如Integer.toHexString()之类的预制函数或任何其他东西,我需要真正地制作算法,否则我什么都不会学。 问
我有十六进制字符串,例如“0x103E”,我想将其转换为整数。意思是to我尝试了但它给出了数字格式异常。我如何实现这一点?
问题内容: 如何将RGB格式的颜色转换为十六进制格式,反之亦然? 例如,转换为。 问题答案: 注 :这两个版本的期待整数值,并且,所以你需要,如果你有非整数值做自己的舍入。 以下将执行RGB到十六进制的转换,并添加任何所需的零填充: 转换另一种方式: 最后,在答案中讨论并在@cwolves的评论中建议使用的替代版本: 更新 这是它的一个版本,还解析了一个速记的三元组,例如“#03F”:
问题内容: 我有一个Java文件 我想将 pic.bmp 转换为十六进制值的数组,以便可以编辑并将其保存为修改后的版本。 是否有Java类可以做到这一点? 问题答案: 你真幸运。我几个月前不得不这样做。这是一个精简版,需要从命令行获取两个参数。命令行参数都是文件名…第一个是输入文件,第二个是输出文件。输入文件以二进制形式读取,输出文件以ASCII十六进制形式写入。希望您可以根据自己的需要进行调整。
问题内容: 尝试执行数字格式异常时,出现异常 如果我减少十六进制数字中的一位,它将转换但不会转换。为什么以及如何解决这个问题? 问题答案: 这将导致整数溢出,因为整数始终在Java中签名。从该方法的文档中(重点是我的): 如果发生以下任何一种情况,将引发type 异常: 第一个参数为null或长度为零的字符串。 基数小于Character.MIN_RADIX或大于Character.MAX_RAD