2進数から16進数への変換の問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
h.k

2進数から16進数への変換の問題

#1

投稿記事 by h.k » 15年前

こんばんは。
いつもお世話になっております。
学校の課題プログラムでわからないところがあったので質問させて頂きます。

課題のプログラムで

65535以下の10進自然数を2進数および16進数に変換するプログラムを作成し、実行しなさい.ただし、プログラムは以下の仕様を満たすものとする.
<仕様>
1. 変換すべき数は、キーボードから打ち込む.なお、その数は文字配列(例えば、 input[10])に関数gets()で読み込ませること.
2. 文字配列に格納された数は、関数atoi()によって文字列から整数に変換し、さらに2進数化を行い、その結果を別の文字配列(例えば、binary[20])に格納すること.
3. 変換された2進数およびその逆順を表示すること.
4. 逆順にされた2進数の数値について、4ビット毎に16進数に変換して表示すること(16進数の数値表示にはprintfを用いても良い.)

といったものが課題として出されました。
10進自然数から2進数、その逆順を表示するところまではできたのですが、”逆順にされた2進数の数値について、4ビット毎に16進数に変換して表示すること”という部分を表示したいのですが全くわかりません。
どのような考え方でプログラムすればいいでしょうか?

プログラムは、

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
int i,a,b,k,n;
char input[10],binary[20];

printf("Please input the number to be transformed: ");
gets(input);
a=atoi(input);
i=0;

printf("(1) Binary expression : ");

while(a){
b=a%2;
binary[i++]=b;
a=a/2;}

for(n=i-1;n>=0;n--){
printf("%d",binary[n]);
}
printf("\n");

printf("(2) Binary expression (reversed order): ");

for(k=0;k<=i-1;k++){
printf("%d",binary[k]);}

printf("\n");

printf("(3) Hexadecimal expression for (2) : ");

return 0;
}

というところまで書けました。

OSはWindows XPで、コンパイラはVC++ 2008EEを使っています。
c言語は始めて半年ほどです。
あと課題は明日提出となっています。

お手数掛けますが、ご指導ご鞭撻のほどよろしくお願いいたします。

組木紙織

Re:2進数から16進数への変換の問題

#2

投稿記事 by 組木紙織 » 15年前

宣言は以下のような感じの文字列の二進数4桁を入力し16進数を文字として返す関数をつくることができますか?
char biToHex(char in[4]);

ru

Re:2進数から16進数への変換の問題

#3

投稿記事 by ru » 15年前

char input[10],binary[20]={0}; // 初期化

    printf("(3) Hexadecimal expression for (2) : "); 
    for(k=5-1; k>=0; k--)
    {
        printf("%X", binary[k*4+0]<<0 | binary[k*4+1]<<1 | binary[k*4+2]<<2 | binary[k*4+3]<<3);
    }
    printf("\n");

    return 0;

h.k

Re:2進数から16進数への変換の問題

#4

投稿記事 by h.k » 15年前

組木紙織様

ご返信ありがとうございます。
アドバイスを基ににもう少し頑張ってみようと思います!

ru様

ありがとうございます。
参考にさせていただきます^^

h.k

Re:2進数から16進数への変換の問題

#5

投稿記事 by h.k » 15年前

ありがとうございました。
うまくプログラムを作ることができました。

閉鎖

“C言語何でも質問掲示板” へ戻る