【发布时间】:2015-08-18 12:43:10
【问题描述】:
在做Integer.parseInt(x, 2)时,不考虑符号位。
举个例子,
System.out.println(Integer.toBinaryString(-1)); // This output's "11111111111111111111111111111111"
System.out.println(Integer.parseInt(Integer.toBinaryString(-1), 2));
第二行抛出,
Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111111111"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.Test.main(Test.java:116)
我有一个场景将Integer 转换为Binary String,然后再转换回来。
有没有办法让parseInt() 方法用符号位解析它?
编辑:
this 问题中的答案有一个 hacky 解决方案,可以在更大的数据类型上使用parseXX() 方法(例如:需要短整数时的 Integer.parseInt() 或需要 int 时的长整数)。如果有人试图解析负长(因为没有比长更大的类型),这将不起作用。
但@Tagir 的答案似乎适用于所有类型。所以让这个问题悬而未决。
【问题讨论】:
-
“这不会在所有情况下都有效” ...你能举一个它不起作用的例子吗?
-
您的问题是关于
int或Integer类型,因此“所有情况”是否指更大的类型还不清楚。它确实确实适用于括号中的短语所涵盖的“所有情况”。