1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java 16进制转int_java 16进制与int互转问题

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

时间:2022-02-13 05:26:59

相关推荐

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

展开

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。