侏罗纪进攻免费完整版:帮帮我,用C++将十六进制数转换成十进制数,谢谢(整个程序的代码)~~~~!!!!

来源:百度文库 编辑:高校问答 时间:2024/05/07 05:03:00
帮帮我,用C++将十六进制数转换成十进制数,谢谢~~~~!!!!请写出详细代码~~~整个程序的代码~~~~谢谢~~~~!!!!!

十六进制数应该是用一个字符串表示的吧?
设一个整型变量i=1;再设s=0;
从字符串的右边开始向左遍历,将每个字符对应的数字乘以i,用s加上这个乘积,存回s,然后i=i*16.

补充一下:
现在百度知道上的同志对“写出详细代码”这样的要求比较反感,一般都只会给出思路。

char hex[]="abcd";
char dec[20];
int d;
sscanf(hex,"%x",&d);
sprintf(dex,"%d",d);
printf("%d",d);

题外话:还有,楼上的方法未免太。。。
下面的函数应该是这样的吧
int HexSymbolToInt(char cHexSymbol)
{
if (cHexSymbol<='9')
return cHexSymbol-'0';
if (cHexSymbol<='F')
return cHexSymbol-'A'+10;
return cHexSymbol-'a'+10;
}
}

UINT64 HexToInt(CString sHex)
{
char cSingle=sHex[0];
UINT64 iDec=HexSymbolToInt(cSingle);
for(int i=1;i<=sHex.GetLength()-1;i++)
{
iDec*=16;
cSingle=sHex[i];
iDec+=HexSymbolToInt(cSingle);
}
return iDec;
}

int HexSymbolToInt(char cHexSymbol)
{
switch(cHexSymbol)
{
case 'a':return 10;break;
case 'A':return 10;break;
case 'b':return 11;break;
case 'B':return 11;break;
case 'c':return 12;break;
case 'C':return 12;break;
case 'd':return 13;break;
case 'D':return 13;break;
case 'e':return 14;break;
case 'E':return 14;break;
case 'f':return 15;break;
case 'F':return 15;break;
default:
return atoi(&cHexSymbol);
}
}

void hex(long int num)
{
int flag=0,n;
int ch[33];

if(num==0)
{
printf("\n转换成二进制后为:%d\n",0);
return;
}

while(1)
{
if(num!=0)
{
if((num%16)>9)
switch (num%16)
{
case 10:
ch[flag]='A';
break;
case 11:
ch[flag]='B';
break;
case 12:
ch[flag]='C';
break;
case 13:
ch[flag]='D';
break;
case 14:
ch[flag]='E';
break;
case 15:
ch[flag]='F';
break;
}
else
ch[flag]=char(num%16);

num=num/16;
flag++;
}
if(num==0)
break;
}
printf("\n转换成十六进制后为:");
for(n=flag-1;n>-1;n--)
{
if(ch[n]>9)
printf("%c",ch[n]);
else
printf("%d",ch[n]);
}
printf("\n");
getch();
}