Java - 将二进制解析为long

时间:2016-10-18 10:50:41

标签: java string binary java-8

我有一个数字的二进制表示,并希望将其转换为long(我有Java 8)

public class TestLongs {
public static void main(String[] args){
    String a = Long.toBinaryString(Long.parseLong("-1")); // 1111111111111111111111111111111111111111111111111111111111111111
    System.out.println(a);
    System.out.println(Long.parseLong(a, 2));// ??? but Long.parseUnsignedLong(a, 2) works
}

}

此代码会生成Exception in thread "main" java.lang.NumberFormatException: For input string: "1111111111111111111111111111111111111111111111111111111111111111" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 1111111111111111111111111111111111111111111111111111111111111111 at java.lang.Long.parseLong(Long.java:592) 这有什么不对?为什么Long.parseLong(a,2)不起作用?

2 个答案:

答案 0 :(得分:5)

Long.parseLong()没有对待第一个' 1'字符作为符号位,因此该数字被解析为2 ^ 64-1,这对于long来说太大了。 Long.parseLong()期望输入String代表负数,以' - '开始。

为了Long.parseLong(str,2)要返回-1,您应该传递String,以' - '开头。并以1的二进制表示结束 - 即Long.parseLong("-1",2)

答案 1 :(得分:3)

Eran是对的,你问题的答案是:

System.out.println(new BigInteger(a, 2).longValue());