1

我有看起来像这样的代码

             public static void main(String[] args) {
    String string= "11011100010000010001000000000000";
   String string1= "00000000010000110000100000101100";

    System.out.println(Integer.toHexString(Integer.parseInt(string1,2)));

    System.out.println(Integer.toHexString(Integer.parseInt(string,2)));


}

第一个字符串转换很好,但第二个有 java.lang.NumberFormatException 错误不知道问题是什么

4

5 回答 5

5

试试这个:

Long.toHexString(Long.parseLong(string,2))

(从 parsLong 编辑为 parseLong)

于 2012-12-03T04:28:54.817 回答
3

值得一提的是,您还可以使用BigInteger该类:

String string  = "11011100010000010001000000000000";
String string1 = "00000000010000110000100000101100";

System.out.println(new BigInteger(string1, 2).toString(16));
System.out.println(new BigInteger(string, 2).toString(16));
于 2012-12-03T04:47:17.313 回答
1

您可以使用Long代替Integer, (Long.parseLongLong.toHexString方法)。

于 2012-12-03T04:29:17.077 回答
1

当 32 个字符的二进制数的最高位设置为1时,结果值超出了 支持的正数范围,int不能再被解释为有效整数。根据文档,这会导致异常:

如果发生以下任何一种情况,则会引发 NumberFormatException 类型的异常:

  • 第一个参数为空或长度为零的字符串。
  • 基数小于 Character.MIN_RADIX 或大于 Character.MAX_RADIX。
  • 字符串的任何字符都不是指定基数的数字,除非第一个字符可能是减号“-”(“\u002D”),前提是该字符串的长度大于 1。
  • 字符串表示的值不是 int 类型的值。(重点是我的)

为了输入这个负二进制值,-在数字前面使用符号,并将剩余位转换为 2-s 补码表示。

如果您需要超过 32 位的数字,或者您希望该值继续被解释为正数,则需要切换到 64 位整数数据类型。

于 2012-12-03T04:31:53.007 回答
0

如果要解析为整数,则范围应为

1000000000000000000000000000000001111111111111111111111111111111

于 2012-12-03T04:31:58.967 回答