Что-то, что я нахожу довольно крутым, а это то, что если ваш список состоит всего из двух элементов:
ls = ['a', 'b']
dict([ls])
>>> {'a':'b'}
Помните, что dict принимает любой итерабельный, содержащий итерируемый, где каждый элемент в итерабельном должен быть истребитель с двумя объектами.
Почему вы не используете для этого функцию 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);
@ См. JavaDoc:
вы можете использовать этот метод: https://stackoverflow.com/a/31804061/3343174 он идеально преобразует любое шестнадцатеричное число (представленное в виде строки) в десятичное число
SHA-1 создает 160-битное сообщение (20 байтов), слишком большое, чтобы его можно было сохранить в значении int
или long
. Как предполагает Ральф, вы можете использовать BigInteger.
Чтобы получить (менее безопасный) int хеш, вы можете вернуть хеш-код возвращенного байтового массива.
В качестве альтернативы, если вам совсем не нужен SHA, вы можете просто использовать строковый хеш-код UUID.
Я наконец-то нашел ответы на свой вопрос на основе всех ваших комментариев. Спасибо, я попробовал это:
public Integer calculateHash(String uuid) {
try {
//....
String hex = hexToString(output);
//Integer i = Integer.valueOf(hex, 16).intValue();
//Instead of using Integer, I used BigInteger and I returned the int value.
BigInteger bi = new BigInteger(hex, 16);
return bi.intValue();`
} catch (NoSuchAlgorithmException e) {
System.out.println("SHA1 not implemented in this system");
}
//....
}
Это решение не оптимально, но я могу продолжить свой проект. Еще раз спасибо за вашу помощь