Java:16進数文字列を数値に変換する方法

   2012/08/26

文字列を数値に変換する処理は、色々なところで必要になります。

こんにちは、管理人イガジーです。

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);

という感じです。