Как преобразовать шестнадцатеричную строку в long в java?
Я хочу преобразовать шестую строку в long в java.
Я пробовал с общим преобразованием.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
Но я получаю это сообщение об ошибке:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Есть ли способ конвертировать String в java? Или я пытаюсь, что на самом деле невозможно!
Спасибо!
Ответы
Ответ 1
Long.decode(str)
принимает различные форматы:
Принимает десятичную, шестнадцатеричную и восьмеричную числа, заданные следующими Грамматика:
DecodableString:
- Подписать opt DecimalNumeral
- Знак opt 0x HexDigits
- Знак opt 0X HexDigits
- Знак opt # HexDigits
- Знак opt 0 OctalDigits
Знак:
Но в вашем случае это не поможет, ваша String выходит за рамки того, что может длиться долго. Вам понадобится BigInteger
:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Вывод:
+23846102773961507302322850521
Для сравнения здесь Long.MAX_VALUE
:
9223372036854775807
Ответ 2
Использовать parseLong:
Long.parseLong(s, 16)
Ответ 3
new BigInteger(string, 16).longValue()
Для любого значения someLong:
new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
Другими словами, это вернет long
, который вы отправили в Long.toHexString()
для любого значения long
, включая отрицательные числа. Он также примет строки, которые больше, чем long
, и тихо возвращают младшие 64 бита строки как long
. Вы можете просто проверить длину строки <= 16 (после обрезания пробелов), если вам нужно убедиться, что вход соответствует значению long
.
Ответ 4
Long.parseLong(s, 16)
будет работать только до "7fffffffffffffff"
. Вместо этого используйте BigInteger
:
public static boolean isHex(String hex) {
try {
new BigInteger(hex, 16);
return true;
} catch (NumberFormatException e) {
return false;
}
}