最大10文字の10進数文字を16進数に変換し表示する
最大10桁の16進数文字を数字の10進数で表示するコードを記述する事は出来たのですが、その逆が、どうしてもうまくいきません。16進数文字を数字の10進数で表示させるコードをベースに何処の箇所を修正すれば10進数文字を16進数に変換出来るのでしょうか?初心者で難しいコードが解らない為、ダラダラとしたコードで申し訳ございません。
また、今、C言語の文字列の勉強をしてる為、いくつか仕様がありますので、宜しくお願いします。
(1)入力された10進数文字を数値の10進数に変換させた後に、16進数の文字として表示させる。
(2)「printf」以外の関数は使用しない。
(3)最後に表示させる時は「%s」を使用する。
-------------------------------------------------
【最大10桁の16進数文字を数字の10進数で表示】
#include "stdafx.h"
#define MEX 10
/*「function」:入力文字された文字数*/
char ToInt( char cInt)
{
int mal=0;
switch (cInt){
case '0': mal=0; break;
case '1': mal=1; break;
case '2': mal=2; break;
case '3': mal=3; break;
case '4': mal=4; break;
case '5': mal=5; break;
case '6': mal=6; break;
case '7': mal=7; break;
case '8': mal=8; break;
case '9': mal=9; break;
case 'a': mal=10; break;
case 'A': mal=10; break;
case 'b': mal=11; break;
case 'B': mal=11; break;
case 'c': mal=12; break;
case 'C': mal=12; break;
case 'd': mal=13; break;
case 'D': mal=13; break;
case 'e': mal=14; break;
case 'E': mal=14; break;
case 'f': mal=15; break;
case 'F': mal=15; break;
}
return (mal);
}
/*「function」:位の計算*/
double HexAcc( double n )
{
int i;
double ans=1;
for( i=0; i<n; i++ ){
ans *= 16;
}
return (ans);
}
int _tmain(int argc, _TCHAR* argv[])
{
int i=0,n=0,j=0,k=0,s=0,m=0;
char decimal[ 255 ], ditto[ 255 ],sub[ 255 ];
/*入力されない場合*/
if( argc > 1 ){
decimal[s] = argv[1][i];
}
else{
printf("16進数を入力してください。\n");
return 1;
}
/*subに文字として'\0'を代入*/
for( k=0; k<=128; k++ ){
sub[k] = '0';
}
/*入力された文字数を受取る*/
for( i=0; argv[1][i] != '\0'; i++ ){
decimal[i] = argv[1][i];
}
decimal[i] = '\0';
/*空白文字のチェック*/
for( i=0; decimal[i] != '\0'; i++ ){
if( decimal[i] != ' ' ){
ditto[n] = decimal[i];
n++;
}
}
/*'\0'を代入(文字列の終端)*/
ditto[n]='\0';
/*「0」から「9」のループ*/
for( n=0; ditto[n] != '\0'; n++ ){
if(( ditto[n] == '0' ) || ( ditto[n] == '1' ) || ( ditto[n] == '2' ) || ( ditto[n] == '3' )
|| ( ditto[n] == '4' ) || ( ditto[n] == '5' ) || ( ditto[n] == '6' ) || ( ditto[n] == '7' )
|| ( ditto[n] == '8' ) || ( ditto[n] == '9' ) || ( ditto[n] == 'A' ) || ( ditto[n] == 'B' )
|| ( ditto[n] == 'C' ) || ( ditto[n] == 'D' ) || ( ditto[n] == 'E' ) || ( ditto[n] == 'F' )
|| ( ditto[n] == 'a' ) || ( ditto[n] == 'b' ) || ( ditto[n] == 'c' ) || ( ditto[n] == 'd' )
|| ( ditto[n] == 'e' ) || ( ditto[n] == 'f' )){
}else{
printf("エラー\n 16進数以外の文字が含まれております。\n");
return 0;
}
}
/*桁数のループ*/
for( n=0; ditto[n] != '\0'; n++ ){
m = m + 1 ;
}
/*桁数の判断*/
if( m <= MEX ){
}else{
printf("エラー\n入力文字数は、%d文字以内にしてください。\n",MEX);
return 0;
}
/*subにdittoを代入*/
for( n=0; ditto[n] != '\0'; n++){
sub[MEX-m+n] = ditto[n];
}
/*'\0'を代入(文字列の終端)*/
sub[MEX] = '\0';*/
/*「double型:addの初期化」「int型:ans初期化」add・ansの初期化*/
double ans=0;
double add=0;
/*sub[0]からsub[9]の計算*/
for( n=0; sub[n] != '\0'; n++){
ans = ToInt(sub[n]);
add += ans * HexAcc(MEX-n-1);
}
/*最大10桁の16進数文字を数字の10進数で表示*/
printf("最大10桁の16進数文字を数字の10進数に変換した値は %f \n",add);
お礼
回答いただき、ありがとうございます。 制限なしだから、どこにも書いていないのですね・・・。 納得しました。