こんばんは。
いつもお世話になっております。
学校の課題プログラムでわからないところがあったので質問させて頂きます。
課題のプログラムで
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言語は始めて半年ほどです。
あと課題は明日提出となっています。
お手数掛けますが、ご指導ご鞭撻のほどよろしくお願いいたします。
2進数から16進数への変換の問題
Re:2進数から16進数への変換の問題
宣言は以下のような感じの文字列の二進数4桁を入力し16進数を文字として返す関数をつくることができますか?
char biToHex(char in[4]);
char biToHex(char in[4]);
Re:2進数から16進数への変換の問題
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;
Re:2進数から16進数への変換の問題
組木紙織様
ご返信ありがとうございます。
アドバイスを基ににもう少し頑張ってみようと思います!
ru様
ありがとうございます。
参考にさせていただきます^^
ご返信ありがとうございます。
アドバイスを基ににもう少し頑張ってみようと思います!
ru様
ありがとうございます。
参考にさせていただきます^^