gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:40 48 4
gpt4 key购买 nike

我明白了,但我还是不明白:

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/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com