Как преобразовать шестнадцатеричную строку в 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


использовать parseLong:

Long.parseLong(s, 16)

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;
    }
}