JAVA--长整数与16进制字符串互相转换
⼀般情况下,我们在对中10进制与16进制互相转换的时候,通常是采⽤下列⽅法(以long类型为例):
10进制化为16进制:HexString(Long v);
16进制化为10进制:Long Long.valueOf(String v, int radix);//其中radix表⽰将字符串v为哪种进制的表⽰⽅法
⼤多数时候,这两个⽅法都可以很完美的为我们解决问题。
java valueof
不过,也有例外的时候。
⾸先,在java中,Long是⼀个的有符号长整型,其最⼤值⽤16进制来表⽰就是:0x7fffffffffff ,其最⼩值就是:0xffffffffffff .
⽽⽅法HexString得到的String字符串是⼀个表⽰⽆符号的长整型,也就是说,当你传给它的参数是⼀个负数的时候,它返回的结果会是在0x800000000000和0xFFFFFFFFFFFE之间的数。
⽽⽅法Long.valueOf却认为你传给它的字符串是表⽰⼀个有符号的长整型,所以你传⼊⼀个0x80000000
0000和0xFFFFFFFFFFFE之间的数的时候,它会认为这个数超过了Long的最⼤数值,因此抛出异常。
有⼀个解决办法(trick),可以是先将这个⽆符号的字符串数值转换为10进制的BigInteger类型:new BigInteger(string, 16);然后调⽤BigInteger类的⽅法longValue(),就可以得到有符号的10进制长整型。
再分享⼀下我⽼师⼤神的⼈⼯智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段⼦!希望你也加⼊到我们⼈⼯智能的队伍中来!