我的代码看起来像这样
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错误 不知道问题是什么
答案 0 :(得分:4)
试试这个:
Long.toHexString(Long.parseLong(string,2))
(从parsLong编辑为parseLong)
答案 1 :(得分: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));
答案 2 :(得分:1)
您可以使用Long
代替Integer
,(Long.parseLong
和Long.toHexString
方法。
答案 3 :(得分:1)
当32个字符的二进制数的最高有效位设置为1
时,结果值超出int
支持的正数范围,并且不能再被解释为有效整数。这会根据文档导致异常:
如果发生以下任何一种情况,则抛出NumberFormatException类型的异常:
- 第一个参数为null或是一个长度为零的字符串。
- 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
- 字符串的任何字符都不是指定基数的数字,除非第一个字符可以是减号' - '('\ u002D'),前提是该字符串长度超过长度1.
- 字符串表示的值不是int类型的值。(强调是我的)
要输入此负二进制值,请在数字前面使用-
符号,并将其余位转换为2-s补码表示。
如果您需要长度超过32位的数字,或者您希望该值继续被解释为正数,则需要切换到64位整数数据类型。
答案 4 :(得分:0)
如果要解析为整数,则范围应为
10000000000000000000000000000000
至01111111111111111111111111111111