Tôi đang cố gắng chuyển đổi một chuỗi thập lục phân thành số nguyên. Chuỗi thập lục phân được tính từ hàm băm (sha-1). Tôi nhận được lỗi này: java.lang.NumberFormatException. Tôi đoán nó không giống như biểu diễn chuỗi của hệ thập lục phân. Làm thế nào tôi có thể đạt được điều đó. Đây là mã của tôi:Hệ thập lục phân đến số nguyên trong Java
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();
}
Ví dụ, khi tôi vượt qua chuỗi này: _DTOWsHJbEeC6VuzWPawcLA, băm ông của mình: 0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15
Nhưng tôi nhận được: java.lang.NumberFormatException: Đối với chuỗi đầu vào: "0xC934E5D372B2AB6D0A50B9F0341A00ED029BDC15"
Tôi thực sự cần thực hiện việc này. Tôi có một bộ sưu tập các yếu tố được xác định bởi UUID của họ là chuỗi. Tôi sẽ phải lưu trữ các yếu tố đó nhưng hạn chế của tôi là sử dụng một số nguyên làm id của chúng. Đó là lý do tại sao tôi tính toán giá trị băm của tham số được đưa ra và sau đó tôi chuyển đổi thành một int. Có lẽ tôi đang làm điều này sai nhưng ai đó có thể cho tôi một lời khuyên để đạt được điều đó một cách chính xác !!
Cảm ơn sự giúp đỡ của bạn !!
đầu tiên của tất cả các số là quá lớn đối với số nguyên thường xuyên. – Andrey
Như Andrey nói, nó sẽ không vừa với một số nguyên thông thường. Nếu bạn vui mừng thay đổi sang java.math.BigInteger, bạn chỉ có thể 'trả về BigInteger mới (1, digest.digest())'. – eggyal