java 16进制转int_java 16进制与int互转问题

因为自己在写16进制字符串解析方面的东西,为了验证正确性,就和java底层Integer执行结果对比遇到一个不解的问题,测试代码如下:publicstaticvoidmain(String[]args){inti=0xFFFFFFF...

因为自己在写16进制字符串解析方面的东西,为了验证正确性,就和java底层Integer执行结果对比

遇到一个不解的问题,测试代码如下:

public static void main(String[] args) { int i=0xFFFFFFFF; String s=Integer.toHexString(i);//这里用Integer的转换方法转为16进制字符串 System.out.println("将"+i+" 转换后为: "+s); System.out.println(); //-------这里是自己写的解析方法-------- long stime=System.nanoTime(); int v1=(int)HexKit.parse(s); long etime=System.nanoTime(); System.out.println("解析时间:"+(etime-stime)+"ns "+(etime-stime)/1000/1000+"ms 结果:"+v1); //-------这里是Ingteger的解析方法------------ stime=System.nanoTime(); int v2=Integer.parseInt(s,16); etime=System.nanoTime(); System.out.println("解析时间:"+(etime-stime)+"ns "+(etime-stime)/1000/1000+"ms 结果:"+v2); }

FFFFFFFF也没超过Int的范围,为什么Integer自己转换成的16进制字符串自己却解析失败

问题一直没有满意答案,但是通过自己看API找到了答案!

看了API才知道Integer.parseInt(String s,int radix)这个方法保留了二进制符号位的性质

就是说他解析的范围是:-80000000 至 7FFFFFFF (不能有 0x 前缀)

而不是我所想象的范围:0x00000000 至 0xFFFFFFFF

Integer.MAX_VALUE = 0x7FFFFFFF

Integer.MIN_VALUE = 0x80000000

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值