- 締切済み
16進法を10進法に
16進法を10進法にするにはどうしたらいいんでしょう? 10進法→16進法はわかるのですが。。。 プログラムものせていただけるとありがたいです。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
>16進法を10進法にする 16進法を10進法にするのは不可能です。 16進法は16進法、10進法は10進法で別なもの、 法則なのですから。 #揚げ足取りはこの辺にして本題。 16進数表記を10進数表記にしたいということでしょうか? これであれば、#2で書いたように数学の問題です。 C言語やコンピュータ上で扱われる数値自体に 16進も10進もありません。 ただ、人間が見る表示の違いとして存在するだけです。 #include <stdio.h> int main( int argc, char** argv ) { int digit= 255; printf("%o\n", digit );/* 8進で出力 */ printf("%d\n", digit );/* 10進で出力 */ printf("%x\n", digit );/* 16進で出力 */ return 0; } 上記はどれも10進数で表すところの 255 という数値です 変換したあとどうするか質問者の意図がわからないので、 上記は標準出力に出力するだけサンプルです。
再帰にするのが便利ですし#4さんの言う方法で一発でしょうが 一応、シンプルなサンプルリスト作りましたので、 処理手順だけ示します。 #include <stdio.h> #include <string.h> void main() { unsigned char hex[]="5E8C"; unsigned int max,temp,sum=0; max=sizeof(hex)/sizeof(char); strupr((char*)hex); for (unsigned int i=1;i<max;i++) { ((temp=hex[max-i-1])-=((temp>'9'?7:0)+'0')); sum+=temp<<=(i-1?4*(i-1):0); } printf("16進数<%s>の10進数値は<%d>です\r\n",hex,sum); }
- asuncion
- ベストアンサー率33% (2127/6289)
No.1の者です。 > 5 * 16^3 + 14 * 16^2 + 8 * 16 + 12 まじめにやればこうなりますが、実際にはこんな計算はしなくていいです。 "%x"で読んで"%d"で書く。 おしまい。
- Interest
- ベストアンサー率31% (207/659)
> 16進法を10進法にするにはどうしたらいいんでしょう? 16進のデータはどのように与えられますか? 変換後の10進データはどのように出力したいですか?
- aris-wiz
- ベストアンサー率38% (96/252)
>16進法を10進法に これはC言語ではなく数学の問題ですよね? C言語内で扱われる数値自体に 10進法も16進法もありません。 どんなことをするプログラムなのかも書かずに プログラムを下さいと言われても 無理だと思いますが。。。
- asuncion
- ベストアンサー率33% (2127/6289)
例えば、16進数の5E8Cを10進数に変換する場合を考えてみます。 答えは、5 * 16^3 + 14 * 16^2 + 8 * 16 + 12 となります。ここまではいいですか? ^はべき乗を表わしています。 上の式を変形すると、 ((((5 * 16) + 14) * 16) + 8) * 16) + 12 となります。ここまではいいですか? 後の方の式をよくながめてください。 16進数の各桁の数字と16とによる、繰り返しのパターンが見えてきませんか?