C言語関係掲示板

過去ログ

No.1332 2進数から10進数へ変換するプログラム

[戻る] [ホームページ]
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;
}