Java 中的十六进制到整数

2022-09-01 06:22:58

我正在尝试将字符串十六进制转换为整数。字符串十六进制是从哈希函数 (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。也许我做错了,但有人可以给我一个建议来正确地实现这一目标!

感谢您的帮助!!


答案 1

为什么你不使用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

试试这个

public static long Hextonumber(String hexval)
    {
        hexval="0x"+hexval;
//      String decimal="0x00000bb9";
        Long number = Long.decode(hexval);
//.......       System.out.println("String [" + hexval + "] = " + number);
        return number;
        //3001
    }