- ベストアンサー
2進数を10進数へ変換したいのですが・・・
初心者です、お願いします 任意の2進数を入力してそれを10進数に変換して画面上に出力したいのですが、どなたかヒントをください 自分なりに考えた結果は、[17]以上の配列を用意してそこに格納する、その格納された桁数をstrlenで割り出してからひとつずつ2の重みで計算をしてそれを足していく・・・こんな考え方でいいのでしょうか?ここまで出間違っていることや、それともほかにもっと簡単な方法がありましたら教えてください お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
17以上の文字変数 char buf[17] ということですよね? 良いのではないでしょうか。 ただ、個人的には入力する人が何桁入力するのかわからないので、危険防止のためにbuf[100]位確保しておくと、変な入力による実行時エラーを最小限にくい止められます。 配列に入っているのは、"文字"の 0 or 1 なので文字コードは 0x30 or 0x31 ゛ですね。 これから数字に直す方法は、switch文を使って処理自体を分けることも出来ますし、 そのまま計算で求める(つまり 0x30 引くと 0, 1という数字が得られる)方法もあります。 気をつけるのは 2 とか a とか全然違う文字を入力されたときの対処方法ですね。 もう一つ2進数を入力するときに、 <space> 1101 とか 1101 <space> と空白が入力されている場合に、エラーとするのか、スペースをあらかじめ除去しておくのか、仕様を決めましょう。 速度を気にしなければ私ならループを回して switch(buff[i]) でつくるかな? (0,1以外の文字、スペースの処理などのために) こつは上位の桁から計算するとエレガントですね。 (なぜなのかは考えてみてください。)
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 自分なりに考えた結果は、[17]以上の配列を用意してそこに格納する、 > その格納された桁数をstrlenで割り出してからひとつずつ2の重みで計算をしてそれを足していく・・・ > こんな考え方でいいのでしょうか? ここまで考えてるんだったら、書けばいいのに。 間違っているか否かは、コンパイラと実行結果が教えてくれます。ヒトに教えてもらう前にこのくらいやりましょうよ。
お礼
ご回答ありがとうございます。 確かにそのとおりですねぇ・・・ いろいろと書いては見たのですが、本当にこのやり方でいいのかを検証したかったんです。 ありがとうございました。
- drmoreau
- ベストアンサー率41% (33/79)
何かの問題ですか。 そうでなければ、Cの標準関数を使うのがいちばん簡単だと思います。 strtol関数は、2~36進数までの文字列をlong値に変換してくれます。 これを使うのがいちばん簡単ではないですか。
お礼
ご回答ありがとうございます。 当方初心者なもので、そのような関数があるとは知りませんでした。 早速調べてみます。 ありがとうございました。
お礼
ご回答ありがとうございます。 >気をつけるのは 2 とか a とか全然違う文字を入力されたときの対処方法ですね。 これについては考えていたのですが。 >もう一つ2進数を入力するときに、 <space> 1101 とか 1101 <space> と空白が入力されている場合に、エラーとするのか、スペースをあらかじめ除去しておくのか、仕様を決めましょう。 これについては考えてもいませんでした、説明も大変わかりやすくとても助かりました。ありがとうございました。