将二进制字符串解析为整数时出现数字格式异常

Posted

技术标签:

【中文标题】将二进制字符串解析为整数时出现数字格式异常【英文标题】:Number Format Exception when parse a binary String to an integer 【发布时间】:2020-11-03 07:50:13 【问题描述】:
    public static void main(String[] args) 
        int val1 = 700173;
        int val2 = 700173;
        int val3 = 700173;
        int val4 = 700173;
        
        String string1 = Integer.toBinaryString(val1);
        String string2 = Integer.toBinaryString(val2);
        String string3 = Integer.toBinaryString(val3);
        String string4 = Integer.toBinaryString(val4);
        
        String binaryString = string1 + string2 + string3 + string4;
        
        System.out.println(binaryString);
        
        System.out.println(Integer.parseInt(binaryString, 2));
        
    

所以我有这个代码块,我在其中获取 4 个整数,将它们转换为二进制字符串,将它们连接起来,然后再转换为整数。

所以我可以使用 Integer.parseInt 手动转换每个字符串。但是在连接之后,我得到了最后一个打印语句导致的数字格式异常。

我正在尝试将此二进制字符串转换为整数。

10101010111100001101101010101111000011011010101011110000110110101010111100001101

我认为这可能与长度有关。

任何帮助都会很高兴看到我缺少什么。

谢谢你-

【问题讨论】:

【参考方案1】:

int 只能有 32 位。那是81位。您可以使用BigInteger。喜欢,

BigInteger bi = new BigInteger("101010101111000011011010101" //
        + "011110000110110101010111" //
        + "10000110110101010111100001101", 2);
System.out.println(bi);

在您的代码中

System.out.println(new BigInteger(binaryString, 2));

输出

807245278494179007835917

【讨论】:

谢谢老兄,我现在已经指出了这一点,这似乎很愚蠢!!! @Nitrogen - 表示感谢的更好方式是接受和/或支持答案?。只需单击答案左侧的大复选标记 (✓) 即可接受它,如果您也想投票,请单击答案左侧的向上箭头。我或其他任何人只能对这个好答案(我已经做过)投赞成票,但只有您(或可能是版主)可以将其标记为已接受。

以上是关于将二进制字符串解析为整数时出现数字格式异常的主要内容,如果未能解决你的问题,请参考以下文章

将 *binary* 字符串转换为数字时出现 NumberFormatException

在 sparksql 中以正确格式将字符串数据转换为十进制时出现问题

Objective-C将十六进制字符串解析为整数

“解析 XML 文件时出现异常:文件过早结束。”尝试将 svg 导入 Android Studio

Android - 如何正确地将字符串解析为浮点数(价格数字格式:整数、小数或两者兼有)

Objective-C 将十六进制字符串解析为整数