No.17934![]() |
2進数からの変換 投稿者---かなみ(2004/11/10 20:22:43) |
||
2進数から10進数へ変換するプログラムを作りたいのですが、どう作ればいいのかわからなくて困ってます。10進数から2進数へ変換するプログラムは作れたんですが・・・getcharを使ってソースを書いたらいいのだとは思うのですが。どなたか教えてください。よろしくお願いします。 |
No.17938![]() |
Re:2進数からの変換 投稿者---C学習者(2004/11/10 21:50:32) |
||
>2進数から10進数へ変換するプログラムを作りたいのですが、どう作ればいいのかわからなくて困ってます。 まず、自分ができるだけのソースを張り付けて、何をどうするアルゴリズムがわからないのかを明示すべきでしょう。 基本的には、2進数を一桁ずつとりだして、それが1の場合その桁の重みをかけ、0の場合は次の桁に進めば良いでしょう。あとは、文字を数字に変える動作さえできれば完成するはずです。 |
No.17956![]() |
Re:2進数からの変換 投稿者---Hermit(2004/11/11 08:20:42) |
||
この間の最後のコメントは、まだ残ってるかな? strtol() とか、strtoul() とか使うのが、 いいんじゃないかってコメントがついてましたが。 |
No.18008![]() |
Re:2進数からの変換 投稿者---かなみ(2004/11/11 21:27:13) |
||
ありがとうございます。もう少し頑張ってみます。 |
No.18023![]() |
Re:2進数からの変換 投稿者---ゴマっち(2004/11/12 14:05:02) http://www1.odn.ne.jp/gomatti/ |
||
かなみ さん、こんにちは。 変換サンプルプログラムを作ってみました。 参考にはならないかもしれませんが、反面教師にはなると思うので、よかったら見て反面教師(笑)にしてください。 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #define BUFSIZE 1024 int main(void) { char buf[BUFSIZE], *endptr; unsigned long int val; fputs("正の2進数 : ", stdout); if ( !fgets(buf, BUFSIZE, stdin) ) { fputs("文字を読み取る前にファイル(stdin)終端に達したか\n" "または読み取りエラーです\n", stderr); return EXIT_FAILURE; } /* strtoul を使用して数値に変換 */ errno = 0; val = strtoul(buf, &endptr, 2); if ( (buf == endptr) || (errno == ERANGE) ) { fputs("入力文字(列)は数値に変換出来ません\n", stderr); if ( errno == ERANGE ) fprintf(stderr, "%s\n", strerror(errno)); return EXIT_FAILURE; } /* strtoul 結果表示 */ *endptr = 0; /* "1011AAAA"パターンで入力された場合"AAAA"を削除 */ printf("(strtoul) 2進数 %s → 10 進数 %lu\n", buf, val); /* for 文で変換 */ for ( val = 0, endptr = buf; *endptr; endptr++) { if ( isspace(*endptr) ) continue; /* " 1011"パターンの先行スペース排除処理 */ val <<= 1; val += *endptr - '0'; } /* for 文結果表示 */ printf("(for 文) 2進数 %s → 10 進数 %lu\n", buf, val); return EXIT_SUCCESS; } |