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

标签 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);
    }   
}

失败并出现以下情况:

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/

相关文章:

java - volatile 变量和同步块(synchronized block)的使用

java - 菲利克斯/OSGi : How to use SCR components that are not OSGi services?

java - 使用 Java XPath 解析 XML 简单字符串

java - 使用 FastParse 解析缩进

java - 转换JSON日期格式

c - 嵌入式系统中Long Long到char的转换函数

Android 字符串变量 (HH :mm) to long variable miliseconds

java - 从文件夹中删除图像

java - 使用 javacc 解析和评估简单语言

php - 在 PHP 中将字符串转换为 long int 的正确方法