java: Long.parseLong (s, 16) и Long.toHexString (l) не инвертируются?

Я понимаю, но все же не понимаю:

package com.example.bugs;

public class ParseLongTest {
    public static void main(String[] args) {
        long l = -1;
        String s = Long.toHexString(l);
        System.out.println(s);
        long l2 = Long.parseLong(s, 16);
    }   
}

Это не удается со следующим:

ffffffffffffffff
Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffffffffffffff"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:410)
    at java.lang.Long.parseLong(Long.java:468)
    at com.example.bugs.ParseLongTest.main(ParseLongTest.java:8)

предположительно потому, что если вы буквально интерпретируете 0xffffffffffffffffL, он не поместится в пространстве длинных чисел, которое подписано.

Но почему Long.toHexString () создает строку, которая не может быть проанализирована Long.parseLong (), и как мне обойти это? (Мне нужен способ преобразования длинных значений в их шестнадцатеричное строковое представление и обратно)

7
задан Jason S 17 March 2011 в 18:20
поделиться