我在寻找一种方法来在Java中从32位二进制补码二进制数转换为十进制时遇到麻烦。当出现负数时,我会收到一个溢出错误或数字非负数。
String bin = "11111111111111111111111111111110";
long foo = Long.parseLong(bin);
System.out.println(foo);
这是我尝试过的事情之一,我当时想我需要使用很长时间,因为它最多可以容纳64位。任何帮助都会很棒。谢谢
如果要解析二进制值,则需要提供两个的基数或基数。
long foo = Long.parseLong(bin, 2);
您可以在Java文档页面上看到一个示例:
parseLong("1100110", 2)
返回102L
。
如果没有基数,则使用10为底,不适合。1032
long
请记住,对于32个字符的位字符串,这将为您提供无符号的变体。如果要在中使用带符号的变体long
,可以使用:
if (foo > 0x7fffffffL) foo = -(0x100000000L - foo);
之后进行调整
或者,如果合适,可以将其强制转换为整数:
int foo = (int)Long.parseLong(bin,2);
Integer.parseInt()
给定带符号的数字的要求意味着它不适合原样用于具有最左边1位的32个字符的二进制字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句