目标是在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
答案 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。