十六进制字符串转十进制数的转换

3

我需要在Java中将十六进制字符串转换为十进制。

我的十六进制值是"00000156A56BE980"

我需要的输出是1471654128000

我已经在Java中完成了以下操作:

public static void main (String args [])
{
  String hexValue = " 00000156A56BE980 ";
  Integer result = Integer.parseInt(hexValue, 16);
 System.out.println(result);
}

但我遇到了以下错误:

输入字符串“00000156A56BE980”无法转换为数字格式异常

我已尝试使用long类型,但仍出现相同的错误。对于其他十六进制值,它可以正常工作,但当我们给出更大的十六进制字符串时,它会显示错误。

如何将这个数字转换为十进制数? 有人能帮我解决这个问题吗?


是的,我也尝试过那个了。还是报同样的错误。 - Anand
你会得到一个 NumberFormatException,因为你尝试解析的字符串末尾有一个空格。去掉这个空格。此外,如果该值太大而无法适应 int,则会出现此异常。 - Jesper
4个回答

5

像这样尝试一下

import java.math.*;

class Main {
    public static void main (String args [])
    {
        String hexValue = "00000156A56BE980";
        BigInteger result = new BigInteger(hexValue, 16);
        System.out.println(result);
    }
}

请参考此repl.it

问题可能是因为您的值不在Integer的取值范围内(-231到232-1)- 请参阅文档


repl.it 仍然无法工作。 - bananas
新的 BigInteger(hexValue) 对我有用.. 谢谢 Dax. - Anand
@Taurus:很高兴听到这个消息。 - DAXaholic
@AsteriskNinja 我现在已经从几个系统尝试了,链接没有失效;我猜测你的问题可能出在你这边... - DAXaholic
1
我觉得我出现了错误,提示为“该网站无法提供安全连接”,哈哈。 - bananas

1

这个数字对于32位的 int 来说太大了。

尝试使用 long 代替。

public static void main(String[] args) {
    String hexValue = "00000156A56BE980";
    long result = Long.parseLong(hexValue, 16);
    System.out.println(result);
}

注意:数字中不能有空格。您可以调用.trim()来删除它们。

1

代码能够正常工作需要2个步骤:

  1. 删除字符串中的空格
  2. 结果不适合整数,因此请使用Long或BigInteger

 public static void main(String[] args) {
    String hexValue = " 00000156A56BE980 ";
    long result = Long.parseLong(hexValue.trim(), 16);
    System.out.println(result);
    }


0

该数字太大,超过了整数的范围(> 2^32)。

(该字符串表示的值不是 int 类型的值。)

请查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接