【问题标题】:parsing Hexadecimal in Java用Java解析十六进制
【发布时间】:2016-01-23 14:14:18
【问题描述】:

考虑到 HEX 中的 FFFFFFB2 是十进制的 -78

为什么我的这个操作有错误?

Integer.parseInt("FFFFFFB2", 16)

错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "FFFFFFFFFFFFFFB2"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:495)
    at tmp.Test.main(Test.java:11)

【问题讨论】:

  • 您是否知道您要转换的数字是一个巨大的数字,相当于十进制的 18446744073709552000?

标签: java


【解决方案1】:

考虑到十六进制的 FFFFFFFFFFFFFFB2 是十进制的 -78"

不,FFFFFFFFFFFFFFB2 十六进制是 18446744073709552000 十进制。您将 hex 误认为是 2s 补码。

如果你想取一个 2s 补码位模式并将其转换为数字,this answer 建议一个技巧:

long l = new BigInteger("FFFFFFFFFFFFFFB2",16).longValue();

And it actually works.

注意我使用了BigIntegerlong,而不是longint,因为这个数字太大了。

【讨论】:

    【解决方案2】:

    根据documentation

    如果出现以下任何一种情况,就会抛出 NumberFormatException 类型的异常:

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

    如前所述,您的号码不是int

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2022-11-16
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2020-09-11
      相关资源
      最近更新 更多