java转换导致的NumberFormatException

时间:2014-09-12 16:16:04

标签: java binary numberformatexception parseint

目标是在java中将String转换为int。

我的声明:

String [] dataIn = new String[100];
int [] binVals = new int[100];
int i;
String toBinary;

我首先将十六进制字符串转换为二进制字符串。

static String hexToBin(String s) {
        return new BigInteger(s,16).toString(2);
    }
.....
.....
toBinary = hexToBin(dataIn[i]);

try{
    int temp = Integer.parseInt(toBinary); 
    binVals[i] = temp;
    System.out.println(temp);
} catch (NumberFormatException ex){
    System.out.println("Not gonna work");
}

toBinary是32位的字符串值,即00011100 ... 01 我将结果打印到控制台,以确保它对整数转换有效。然而,使用Integer.parseInt(toBinary);仍会抛出异常。我在这里缺少什么?

更新

根据你们的说法,我现在不再收到异常,但是当我将二进制字符串转换为整数时,它似乎变成了十进制整数。

if (i % 2 == 0)
{
toBinary = hexToBin(dataIn[i]); 
System.out.println("Binary in String: " + toBinary);
try{
    int temp = Integer.parseInt(toBinary, 2); 
    binVals[i] = temp;
    System.out.println("binVals[i] in int" + binVals[i]);
} catch (NumberFormatException ex){
    System.out.println("Not gonna work");
}
    //System.out.println(temp);
} else {
    System.out.println("This should be a timestamp: " + dataIn[i]);
}

输出:

Binary in String: 1001010101010101010101010100000
binVals[i] in int1252698784
This should be a timestamp: 2068a40

3 个答案:

答案 0 :(得分:2)

问题是没有基数的Integer.parseInt会将字符串解释为十进制数,而不是二进制数。大多数这样的“二进制”字符串将表示超过可能的最大整数的数字,略多于20亿,例如, 111,000,101,010,001。

将基数2(二进制)传递给Integer.parseInt

int temp = Integer.parseInt(toBinary, 2);

但是,如果设置了第一个“位”,则代表的数字将超过Integer.MAX_VALUE,然后只有Long.parseLong才能生效。

答案 1 :(得分:1)

试试Integer.parseInt(toBinary, 2);。 2指定字符串是二进制(base 2

编辑:对于您的新问题,问题是Java默认情况下会将整数打印为十进制,因此您需要将(十进制)整数重新转换为二进制字符串。您可以使用Integer.toBinaryString(int i)

答案 2 :(得分:0)

对于解析和格式化整数,您应该考虑使用BigInteger

在任何基数中使用BigInteger.toString(int radix)转换为String。

用于解析使用new BigInteger(String s, int radix)