我明白了,但我还是不明白:
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 数字空间。
但为什么 Long.toHexString() 会生成 Long.parseLong() 无法解析的字符串,我该如何解决这个问题? (我需要一种方法来获取十六进制字符串表示形式的长值,然后再返回)
最佳答案
Long.parseLong(String s, int radix)
不理解二进制补码。对于负数,它需要减号。正如 bestsss 已经提到的,您应该使用 Long.toString(long l, int radix)
使十六进制字符串与此解析方法兼容。
关于java: Long.parseLong(s,16) 和 Long.toHexString(l) 不是反函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5343322/