K&Rの練習問題

K&Rの練習問題で、十六進数で表現された文字列から数値に変換するプログラムを書きました。やり方はすでに分かっているし、何も困らないはずなんですが、10分もあれば書けるかなと思っていたら20分ぐらいかかってしまいました。やっぱりソースコードを読むだけじゃダメで、やっぱり毎日コーディングをしないとすぐに書く能力というのは衰えてしまうのかなと思いました。

// 与えられる文字列の例: 0x01234567890abcdef, 0X0123456789ABCDEF
int htoi(char *s)
{
	int i= 0;
	int num = 0;
	int length = strlen(s);
	int c = 0;

	// 入力チェックしてないけど	
	for (i = 0; i < length - 2; i++) {
		c = s[length-i-1];
		if (isdigit(c)) {
			num = (c - '0') + num * 16;
		} else {
			num = (toupper(c) - 'A' + 10) + num * 16;
		}
	}
	return num;
}