Я пытаюсь преобразовать шестнадцатеричный String в целое число. Шестнадцатеричная шестнадцатеричная строка была рассчитана из хэш-функции (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, которые являются строками. Мне нужно будет сохранить эти элементы, но мои ограничения состоят в том, чтобы использовать целое число в качестве своего идентификатора. Именно поэтому я вычисляю хэш заданного параметра, а затем конвертирую в int. Возможно, я делаю это неправильно, но может ли кто-нибудь дать мне совет, чтобы достичь этого правильно?
Спасибо за помощь!