Java:16進数文字列を数値に変換する方法
文字列を数値に変換する処理は、色々なところで必要になります。
こんにちは、管理人イガジーです。
0〜9の羅列(文字列)を数値に変換するには
Integer.parseInt("数値文字列");
を使います。
同様に、0〜9, a〜f(A〜F)の羅列(16進数文字列)を
数値に変換するには
Integer.parseInt("16進文字列",16);
を使います。
実際の処理としては、Interger.perseInt()は try – catch で囲います。
文字列の中に、変換できないもの(例えば”12×4″などでの”x”)が
含まれていると、例外(Exception)が発生するからです。
例外(Exception)が発生したら、どうするか? は、好き好きですが
(a)結果を適当な数、例えば0(ゼロ)にして続行する
(b)エラーを表示して入力しなおしてもらう
のどちらかになるでしょう。
(b)は手間がかかる割には、利用者にあまり喜んでもらえないので
実際の処理は(a)が多いと思います。
例として、html(css)などでよくある #RRGGBBあるいは
#RGBの16進文字列(#は除いて引数とする)を
Color 変数にするメソッドを書いておきます。
Color getCol(String s){
int r,g,b;
r=g=b=0;
if (s.length()==6){
r=hex2int(s.substring(0,2));
g=hex2int(s.substring(2,4));
b=hex2int(s.substring(4,6));
}else if (s.length()==3){
r=hex2int(s.substring(0,1))*17;
g=hex2int(s.substring(1,2))*17;
b=hex2int(s.substring(2,3))*17;
}
// System.out.printf("r=%d(%x) g=%d(%x) b=%d(%x)\n",
// r,r,g,g,b,b);
return new Color(r,g,b);
}
int hex2int(String s){
int v=0;
try {
v=Integer.parseInt(s,16);
}catch (Exception e){
v=0;
}
return v;
}
substring()を使って2文字ずつ16進数変換しています。
(3桁の場合は1文字ずつ)
桁数が6でも3でもない時、および16進数以外の文字が含まれていた時は
黒になります。
使い方は
String tests="3E3E7F";
Color c=getColor(tests);
という感じです。