java:将二进制字符串转换为int

时间:2013-02-14 20:25:50

标签: java casting binary

我正在尝试将几个二进制字符串转换回int。但是它不会转换我的所有二进制字符串,只留下 java.lang.NumberFormatException 异常。 这是我的测试代码,包含3个二进制字符串:

public class Bin {

    public static void main(String argvs[]) {
            String binaryString ;
            binaryString = Integer.toBinaryString(~0);
            //binaryString = Integer.toBinaryString(~1);
            //binaryString = "1010" ;
            int base = 2;
            int decimal = Integer.parseInt(binaryString, base);
            System.out.println("INPUT=" + binaryString + " decimal=" + decimal) ;
    }
}

如果我转换“1010”它的效果很好,但是当我尝试转换其他两个中的一个时,我得到了异常。有人能解释一下为什么会这样吗?

干杯

4 个答案:

答案 0 :(得分:6)

如上所述,Integer.toBinaryString()将〜0和~1转换为unsigned int,因此它们将超过Integer.MAX_VALUE。

您可以使用long来解析并转换回int,如下所示。

int base = 2;
for (Integer num : new Integer[] {~0, ~1}) {
    String binaryString = Integer.toBinaryString(num);            
    Long decimal = Long.parseLong(binaryString, base);
    System.out.println("INPUT=" + binaryString + " decimal=" + decimal.intValue()) ;
}

答案 1 :(得分:5)

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#toBinaryString(int)toBinaryString()方法将其输入转换为“无符号整数值的二进制表示形式,如果参数为2,则为参数加上2 32 ”。

来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int):如果“字符串表示的值不是parseInt() 类型的值,则NumberFormatException方法会引发int

请注意,~0~1都是负数(分别为-1和-2),因此将转换为2 32 -1和2的二进制表示 32 -2,它们都不能用int类型的值表示,因此会导致您看到的NumberFormatException

答案 2 :(得分:1)

"〜0"的位是11111111111111111111111111111111(32 1' s)。通常,这表示数字-1。 " ~1"的位是11111111111111111111111111111110(31 1' s后跟零)。通常,这代表数字-2。

我试过" 01111111111111111111111111111111" (a 0和31 1' s),表示parseInt中的最高有符号整数,并且没有错误。但我试过" 10000000000000000000000000000000",它代表最小有符号整数,并且再次出现错误。

parseInt方法似乎期待" - "在输入中表示需要负数。看起来这个方法正在检测整数中的溢出并抛出NumberFormatException

答案 3 :(得分:0)

在此处添加所有四种更新方法和比较以便更容易理解

public static void binary() {

    // Gives magnitude in binary along with sign for negative values
    System.out.println(Integer.toString(-1,2)); // -1
    // Give the int value of input binary representation along with sign
    System.out.println(Integer.parseInt(Integer.toString(-1, 2),2)); // -1

    // Gives signed binary representation of input value
    System.out.println(Integer.toBinaryString(-1)); // 11111111111111111111111111111111
    // Gives the integer value of signed binary number
    System.out.println(Integer.parseUnsignedInt(Integer.toBinaryString(-1), 2)); // -1
}