バックグラウンド
Integer.parseInt(someIntString, radix)を使用しても常に機能するとは限らず、場合によっては NumberFormatException が返されることがあります。
API を確認したところ、そのような例外が返されると書かれています。
文字列を整数値として解析できない場合、または基数 < 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()関数の使用を知っていることに注意してください(そして、おそらく私が書いたコードに非常に似ています) が、16 進数だけでなく、任意の基数を処理したいと考えています。
parseInt を使用すると負の値の解析がサポートされることも知っているため、おそらく例外が発生します。
質問
基数を使用して文字列を整数に解析するための組み込み関数または既知のアルゴリズムはありますか?
もちろん、整数変数は値を保持でき(最大4バイトを使用)、数値の符号は無関係であると想定しています。