java:Long.parseLong(s,16)和Long.toHexString(l)不反转?

Jas*_*n S 7 java parsing long-integer

我得到了这个,但我没有得到它:

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);
    }   
}
Run Code Online (Sandbox Code Playgroud)

这失败了以下内容:

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)
Run Code Online (Sandbox Code Playgroud)

大概是因为如果你从字面上解释为0xffffffffffffffffL,它就不适合签名的Long数字空间.

但是为什么Long.toHexString()会产生一个无法通过Long.parseLong()解析的字符串,我该如何解决这个问题呢?(我需要一种方法来获取十六进制字符串表示的长值,然后再返回)

hoh*_*oha 6

Long.parseLong(String s, int radix)不明白两个人的补充.对于负数,它预期减号.正如已经提到的那样,您应该使用Long.toString(long l, int radix)使十六进制字符串与此解析方法兼容.