背景
使用Integer.parseInt(someIntString, radix)并不总是有效,在某些情况下可能会返回 NumberFormatException。
我检查了 API,它说会返回这样的异常:
如果字符串不能被解析为整数值,或者 radix < Character.MIN_RADIX || 基数 > Character.MAX_RADIX。
导致异常的示例代码:
System.out.println(Integer.parseInt("ff00ff00",16));
在java上我得到同样的例外。
由于一个整数包含 4 个字节,这应该仍然有效,但它没有。
这是一个证明这样的事情是可能的:
final String input="ff00ff00";
int output=0;
for(int i=0;i<input.length();++i)
{
output<<=4;
final char c=input.charAt(i);
if(c>='a')
output+=c-'a'+10;
else output+=c-'0';
}
System.out.println(output);
System.out.println(Integer.toHexString(output));
请注意,我知道使用Color.parseColor()函数(它可能与我编写的代码非常相似),但我想处理任何基数而不仅仅是十六进制。
我也知道使用 parseInt 支持负值解析,所以这就是它可能导致异常的原因。
问题
是否有用于使用任何基数将字符串解析为整数的内置函数或已知算法?
我当然假设整数变量可以保存该值(最多使用 4 个字节)并且数字的符号是无关紧要的。