因为自己在写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
展开