【问题标题】:NumberFormatException resulting from java conversionjava转换产生的NumberFormatException
【发布时间】:2014-11-06 21:16:21
【问题描述】:

目标是在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); 仍然会引发异常。我在这里错过了什么?

更新

按照你们说的,我现在已经没有收到异常了,但是当我把二进制String转成整数的时候,好像变成了十进制整数。

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

【问题讨论】:

  • Integer.parseInt(toBinary, 2); 再次具有相同的整数。尽管如果设置了符号位(负数),您确实最好使用(int)Long.parseLong(..., 2)

标签: java binary numberformatexception parseint


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,异常消失了。虽然弹出了另一个问题,但我已经更新了问题
  • int 中的数字不是任何格式。只有当 println 将其转换为 String 时,才会创建十进制表示 - 1252698784。作为测试的一部分,您是否尝试将其转换回十六进制?
  • 我想保留为二进制数
  • 使用Integer.toString(int, int),将基数2 作为第二个参数,将其转换为数字的二进制表示形式的字符串。
  • 好吧,我的理解是,如果我想要二进制表示,它需要像我已经完成的那样保持为字符串而不是整数?
【解决方案2】:

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

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

【讨论】:

  • 谢谢,这有帮助。我已经更新了这个问题,因为整数现在不再是二进制了
【解决方案3】:

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

在任何基数中转换为字符串使用BigInteger.toString(int radix)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多