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