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




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



2進数表記の文字列を数値に変換するプログラムを作成します。 2進数表記の文字列から数値への変換はstrtol関数などで行うことができるので、実用的にはあまり意味のないプログラムです。
変換関数の主なポイントは次のようになります。
・入力した文字列をループで一文字ずつ処理していきます。
・'\0'文字までループ処理を続けます。
・処理する文字を値(0か1)に変換します('0'を減算します)。
・前回の値(最初は0)を2倍にして変換した値を加えます。
・桁がオーバーしたり不正な文字列が使われている場合はメッセージを表示して0xFFFFFFFFの値を返します。
unsigned int
        binval(char *str);

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


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

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


[an error occurred while processing this directive]