Java - 将二进制解析为长

标签 java string binary java-8

<分区>

我有一个数字的二进制表示,想将它转换为长整数(我有 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
}

此代码导致 线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“1111111111111111111111111111111111111111111111111111111111111111” 在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 111111111111111111111111111111111111111111111111111111111111111 在 java.lang.Long.parseLong(Long.java:592) 这里有什么问题?为什么 Long.parseLong(a, 2) 不起作用?

最佳答案

Long.parseLong() 不会将第一个“1”字符视为符号位,因此该数字被解析为 2^64-1,这对于 来说太大了长Long.parseLong() 期望代表负数的输入 String 以“-”开头。

为了让Long.parseLong(str,2)返回-1,你应该传递给它一个以String开头的String '-' 并以 1 的二进制表示形式结束 - 即 Long.parseLong("-1",2)

关于Java - 将二进制解析为长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106229/

相关文章:

c++ - 从 C++ 中的二进制文件顺序读取结构

从 X 长度的文件读取二进制数据时 C++ 程序崩溃

java - 在单个小程序中显示多个图像

java - 如何在二维码上添加标志

c++ - 从旧字符串创建新字符串

javascript - string.charAt(x) 还是 string[x]?

mysql - mysql 查询的正则表达式?

r - 直接从环境中解压 R 对象

java - com.sun.mail.smtp.SMTPSendFailedException : 452 4. 4.5 磁盘空间不足;稍后再试

java - Flutter错误:无法下载bundletool.jar(com.android.tools.build:bundletool:0.9.0)