Как преобразовать шестнадцатеричную строку в длинный в Java? - PullRequest
41 голосов
/ 01 марта 2011

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

79 голосов
/ 01 марта 2011

Long.decode(str) принимает различные форматы:

Принимает десятичные, шестнадцатеричные и восьмеричные числа даны следующим Грамматика:
DecodableString:

  • Знак opt Десятичная цифра
  • Знак opt 0x HexDigits
  • Знак opt 0X HexDigits
  • Знак opt # HexDigits
  • Знак opt 0 OctalDigits

Знак:

  • -

Но в вашем случае это не поможет, ваша Строка выходит за рамки того, что может долго удерживаться. Вам нужно BigInteger:

String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);

Выход:

* * +23846102773961507302322850521 тысяча сорок-девять

Для сравнения, вот Long.MAX_VALUE:

9223372036854775807

40 голосов
/ 01 марта 2011

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

Long.parseLong(s, 16)
11 голосов
/ 14 апреля 2012
new BigInteger(string, 16).longValue()

Для любого значения someLong:

new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong

Другими словами, это вернет long, которое вы отправили в Long.toHexString() для любого значения long, включая отрицательные числа. Он также будет принимать строки, которые больше long и молча возвращать младшие 64 бита строки как long. Вы можете просто проверить длину строки <= 16 (после обрезки пробелов), если вам необходимо убедиться, что входное значение соответствует <code>long.

3 голосов
/ 06 марта 2015

Long.parseLong(s, 16) будет работать только до "7fffffffffffffff".Вместо этого используйте BigInteger:

public static boolean isHex(String hex) {
    try {
        new BigInteger(hex, 16);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}
...