`
辽东小小
  • 浏览: 200634 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

关于Integer的parseInt(String s, int radix)方法的使用

JDK 
阅读更多

最近看了一些别人写的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 长度是十位   运行没有报错       这种算么? 求指点

相关推荐

    Integer类的使用方法

    System.out.println("Integer.parseInt(String s, int radix): " + Integer.parseInt(s1, 2)); ``` 在这个例子中,字符串"1010"是以二进制形式表示的数字10。 - **使用toString(int i, int radix)**:此方法用于...

    java String 与各种进制字符之间的转换

    - `Integer.parseInt(String str, int radix)`: 这个方法用于将一个表示特定进制的字符串转换为整数。例如,`Integer.parseInt("1010", 2)`会返回十进制中的10,因为"1010"是二进制的10。 - `Long.parseLong...

    JAVA 进制转换全攻略.docx

    7. **`Integer.parseInt(String s, int radix)`方法**: 这个方法能够解析一个以指定基数表示的字符串,并返回对应的整数值。例如: ```java String binaryStr = "1010"; int decimal = Integer.parseInt...

    JAVA实用进制转换.pdf

    - **十六进制转十进制**:可以使用`Integer.valueOf(String s, int radix)`方法,其中`s`是十六进制字符串,`radix`是基数(这里是16)。例如: ```java String hexValue = "FFFF"; int decValue = Integer....

    java常用类的使用方法.pdf

    * parseInt(String s, int radix):以radix为基数返回s的十进制数。 * shortValue():返回该整型数所表示的短整数。 * toBinaryString(int i):将整数转为二进制数的字符串。 * toHexString(int i):将整数转为十六...

    src02 Integer

    8. **Integer.parseInt(String s, int radix)**: 这个静态方法解析给定的字符串`s`,根据指定的基数`radix`将其转换为对应的整数值。如果解析失败或基数不正确,它会抛出`NumberFormatException`。 9. **Integer...

    Java进制转换实现

    - `Integer.parseInt(String s, int radix)`:这个函数将一个表示特定进制的字符串转换为对应的十进制整数。例如,`Integer.parseInt("1010", 2)`会返回十进制数字10。 - `Long.parseLong(String s, int radix)`:...

    java进制转换大全

    要将二进制、八进制或十六进制的字符串转换为十进制的整数,可以使用`Integer.valueOf(String s, int radix)`方法,其中`radix`参数指定了输入字符串的基数。例如: - `Integer.valueOf("FFFF", 16).toString()`会...

    JAVA实用进制转换

    如果想要直接从二进制、八进制或十六进制转换为十进制,可以使用`Integer.parseInt(String s, int radix)`方法。 - **使用`parseInt`进行转换**: - 示例:`Integer.parseInt("0101", 2)` 返回 `5` (二进制0101转换...

    java 包装类发给的发广告豆干

    另一个`parseInt(String s, int radix)`方法允许指定进制转换,例如: ```java int n = Integer.parseInt("120", 10); // 10进制转int,n = 120 int n = Integer.parseInt("12", 16); // 16进制转int,n = 18 ...

    JAVA数据类型转换

    - `Integer.parseInt(String)` 或 `Integer.parseInt(String, int radix)` 这两个方法用于将字符串解析为整数。默认情况下,`parseInt()` 使用10进制,但第二个参数可以指定基数(2到36之间)。 - `Integer.value...

    Java进制之间的转换

    此外,如果你想将其他进制的字符串转换为十进制整数,可以使用`Integer.parseInt(String s, int radix)`方法。`radix`参数表示输入字符串的基数。例如: ```java int decimal = Integer.parseInt("1010", 2); // 二...

    java类型转换IntegerStringLongFloatDoubleDate.doc

    第二个重载方法 `Integer.parseInt(String, int radix)` 允许指定基数(2-36),用于解析十六进制或其他进制的数字。 - 另一种方式是通过 `Integer.valueOf(String)` 创建一个 `Integer` 对象,然后调用 `intValue...

    java常用类的使用方法

    - `parseInt(String s, int radix)`:以指定基数解析字符串为整数。 - `shortValue()`:将 Integer 对象转换为 short 类型的值。 - `toBinaryString(int i)`:将整数转换为二进制字符串。 - `toHexString(int i)...

    java 进制转换

    `Integer.parseInt(String s, int radix)` 该方法用于解析一个字符串并将其按照指定的基数转换为整数。 - **示例**: ```java int decimalValue = Integer.parseInt("1100110", 2); // 结果为 102 ``` #### 三...

    基于jdk1.8的Java源码详解 Integer

    Integer类的构造方法只有两个:public Integer(int value)和public Integer(String s) throws NumberFormatException。其中,第二个构造方法传入一个字符串,然后调用parseInt方法将其转换成整数。 parseInt方法是...

Global site tag (gtag.js) - Google Analytics