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

Jea*_*eri 8 java binary casting

我正在尝试将几个二进制字符串转换回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) ;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

干杯

Edd*_*die 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()) ;
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ely 5

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

来自http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int):如果" 由...表示的值,则parseInt()抛出该方法字符串不是类型 " 的值.NumberFormatExceptionint

注意,这两个~0~1为负(-1和-2分别),因此将被转换为2的二进制表示32 -1和2 32 -2分别,两者都不可以以类型的值来表示int,所以使NumberFormatException你看到了.