16進数表記の文字列を数値に変換する
C言語ケーススタディ

Study C Ver2販売開始のお知らせ

 C言語の勉強や教育用に最適です。
 2004/8/23よりStudy C Ver2の販売を開始しました。
 Study C Ver2の新しい機能については
 こちらをご参照ください。
C言語でゲームプログラマーを目指す方へ
 ■C言語ゲームプログラミング講座
 C言語でのゲームプログラミングを解説する講座
 始めました。

2進数表記の文字列を数値に変換するプログラムを改造し16進数表記の文字列を変換するようにします。
16進数表記の文字列から数値への変換もstrtol、scanf関数などで行うことができるので、実用的にはあまり意味のないプログラムです。

主な改造のポイントは次のようになります。
・関数名をbinvalからhexvalに変更
・ループ内の2を掛けている所を16に変更
・文字列の最大サイズを8桁に変更
・文字から数値への変換で0から9とaからf(AからF)の場合を分けて処理するように変更


unsigned int
	hexval(char *str);

main(int argc, char *argv[])
{
        if(argc != 2){
                printf("コマンドの入力形式が間違っています.\n");        
                return;
        }
	printf("%x\n", hexval(argv[1]));
}


unsigned int
	hexval(char *str)
{
	unsigned long
		num;
	int	i1, ch;

	num = 0L;
	for(i1 = 0; ; i1++){
		if(str[i1] >= '0' && str[i1] <= '9'){
			ch = str[i1] - '0';
		}
		else if(str[i1] >= 'a' && str[i1] <= 'f'){
			ch = str[i1] - 'a' + 10;
		}
		else if(str[i1] >= 'A' && str[i1] <= 'F'){
			ch = str[i1] - 'A' + 10;
		}
		else if(str[i1] == '\0'){
			break;
		}
		else{
			printf("変換エラー\n");
			num = 0xFFFFFFFF;
			break;
		}
		num *= 16;
		num += ch;
		if(i1 >= 8){
			printf("値がオーバーしました\n");
			num = 0xFFFFFFFF;
			break;
		}
	}
	return(num);
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run 12ab」のように実行する必要があるので実行ボタンはありません

お問い合わせ先 C言語のトップページに戻る Copyright(C) 2003 潟Iーキッド