在Java中解析十六进制

时间:2016-01-23 14:14:19

标签: java

考虑到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)

2 个答案:

答案 0 :(得分:1)

  

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

不,FFFFFFFFFFFFFFB2十六进制是18446744073709552000十进制。你误将十六进制误认为2s补充。

如果你想采用2s补码位模式并将其转换为数字,this answer提示了一个技巧:

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

And it actually works

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

答案 1 :(得分:0)

根据documentation

  

如果发生以下任何一种情况,则抛出NumberFormatException类型的异常:

     

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

正如已经指出的那样,您的号码不是class Person { @validateSomethingFirst public doSomething() { } private validateSomethingFirst() { ... } }