最近看了一些别人写的java程序,其中就用到Integer.parseInt("23f34d",16);这个方法,当时很不解。
在网上搜了一下,才明白原来是这样的。
首先可以看一下jdk中 java.lang.Integer中的源码如下:
- public static int parseInt(String s) throws NumberFormatException
- {
- return parseInt(s,10);
- }
- public static int parseInt(String s, int radix)throws NumberFormatException
- {
- if (s == null) {
- throw new NumberFormatException("null");
- }
- if (radix < Character.MIN_RADIX) { //Character.MIN_RADIX=2
- throw new NumberFormatException("radix " + radix +
- " less than Character.MIN_RADIX");
- }
- if (radix > Character.MAX_RADIX) { //Character.MAN_RADIX=36
- throw new NumberFormatException("radix " + radix +
- " greater than Character.MAX_RADIX");
- }
- int result = 0;
- boolean negative = false;
- int i = 0, max = s.length();
- int limit;
- int multmin;
- int digit;
- if (max > 0) {
- if (s.charAt(0) == '-') {
- negative = true;
- limit = Integer.MIN_VALUE;
- i++;
- } else {
- limit = -Integer.MAX_VALUE;
- }
- multmin = limit / radix;
- if (i < max) {
- digit = Character.digit(s.charAt(i++),radix);
- if (digit < 0) {
- throw NumberFormatException.forInputString(s);
- } else {
- result = -digit;
- }
- }
- while (i < max) {
- // Accumulating negatively avoids surprises near MAX_VALUE
- digit = Character.digit(s.charAt(i++),radix);
- if (digit < 0) {
- throw NumberFormatException.forInputString(s);
- }
- if (result < multmin) {
- throw NumberFormatException.forInputString(s);
- }
- result *= radix;
- if (result < limit + digit) {
- throw NumberFormatException.forInputString(s);
- }
- result -= digit;
- }
- } else {
- throw NumberFormatException.forInputString(s);
- }
- if (negative) {
- if (i > 1) {
- return result;
- } else { /* Only got "-" */
- throw NumberFormatException.forInputString(s);
- }
- } else {
- return -result;
- }
- }
- 我们平时用到Integer.parseInt("123");其实默认是调用了int i =Integer.parseInt("123",10);
- 其中10代表的默认是10进制的,转换的过程可以看成:
- i= 1*10*10+2*10+3
- 若是
- int i = Integer.parseInt("123",16);
- 即可以看成:
- i = 1*16*16+2*16+3
- 根据:Character.MIN_RADIX=2和Character.MAX_RADIX=36 则,parseInt(String s, int radix)参数中
- radix的范围是在2~36之间,超出范围会抛异常。其中s的长度也不能超出7,否则也会抛异常。
评论
1 楼
huxiulei 2013-01-09
radix的范围是在2~36之间,超出范围会抛异常。其中s的长度也不能超出7,否则也会抛异常。
'
其中s的长度也不能超出7是什么意思?
String bindString = "0000000011";
int bindInt = Integer.parseInt(bindString, 28);
System.out.println(bindString.length());
System.out.println(bindInt);
bindString 长度是十位 运行没有报错 这种算么? 求指点
'
其中s的长度也不能超出7是什么意思?
String bindString = "0000000011";
int bindInt = Integer.parseInt(bindString, 28);
System.out.println(bindString.length());
System.out.println(bindInt);
bindString 长度是十位 运行没有报错 这种算么? 求指点
参考知识库