c语言如何将十六进制转换为十进制?求代码?

如题所述

不要纠结与几进制转几进制这个问题,这其实都是一个意思,只要你弄懂原理就可以了,我给你一个十六进制转八进制的列子你好好研究一下。
#include <iostream>
#include <string>
using namespace std;

int main()
{
int n = 0, i = 0, j = 0, temp = 0, nNum = 0;
char ch;
string strHex[10];
string strBin[10];
string strOct[10];

cin>>n;
for (i = 0; i < n; ++i)
{
cin>>strHex[i];
}

//十六进制转二进制
for (i = 0; i < n; ++i)
{
j = 0;
while (strHex[i][j])
{
switch(strHex[i][j])
{
case '0': strBin[i] += "0000"; break;
case '1': strBin[i] += "0001"; break;
case '2': strBin[i] += "0010"; break;
case '3': strBin[i] += "0011"; break;
case '4': strBin[i] += "0100"; break;
case '5': strBin[i] += "0101"; break;
case '6': strBin[i] += "0110"; break;
case '7': strBin[i] += "0111"; break;
case '8': strBin[i] += "1000"; break;
case '9': strBin[i] += "1001"; break;
case 'A': strBin[i] += "1010"; break;
case 'B': strBin[i] += "1011"; break;
case 'C': strBin[i] += "1100"; break;
case 'D': strBin[i] += "1101"; break;
case 'E': strBin[i] += "1110"; break;
case 'F': strBin[i] += "1111"; break;
default:break;
}
++j;
}
}

//二进制转化为八进制
for (i = 0; i < n; ++i)
{
j = strBin[i].size()-1;//获得长度
while (strBin[i][j] && j>=0)
{
temp = 3;
nNum = 0;
while (temp-- && j>=0)
{
if ('1' == strBin[i][j])
{
switch(temp)
{
case 0: nNum += 4; break;
case 1: nNum += 2; break;
case 2: nNum += 1; break;
default:break;
}
}
--j;
}
strOct[i] += (nNum+'0');
}
}

//字符串逆序
for (i = 0; i < n; ++i)
{
temp = strOct[i].size()-1;
for (j = 0; j <= temp/2; ++j)
{
ch = strOct[i][j];
strOct[i][j] = strOct[i][temp-j];
strOct[i][temp-j] = ch;
}
}
//打印
for (i = 0; i < n; ++i)
{
j = 0;
while (strOct[i][j++] == '0');//跳过前面的0

for(--j; j < strOct[i].size(); ++j)
{
cout<<strOct[i][j]-'0';
}
/*if (i != n-1)*/
cout<<endl;
}

return 0;
}
望采纳!追问

你写的这个看起来太高深了,我好好研究一下。

追答

这主要还是靠你自己搞清原理,这样才能帮助你提高。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-30
我来告诉你标准答案!如果你要打印10进制,直接printf%d就行,如果你要计算,则例如90的16进制的表示值为0x5A。如何获得其十进制的值呢?只需要对其取模得到的是各位的值,在对其取余获得十位的值即可。然后把十位的值乘以10加上个位的值即可
第2个回答  2014-11-30
#include<cstdio>
#include<string.h>
char num[30];
void transform(long long m,int n,char a[])
{
    int i = 0,k;
    while(m)
    {
        k=m%n;
        if(k>=10)
            a[i++]=k-10+'A';
        else
            a[i++]=k+'0';
            m/=n;
    }
    a[i]='\0';
}   
int main()
{
    int k=16,t=10,ilen,i;
    long long sum=0;
     
    scanf("%s",num);
    ilen=strlen(num);
    for(i=0;i<ilen;i++)
    {
        if('0'<=num[i]&&num[i]<='9')
        {
            sum=sum*k+(num[i]-'0');
        }else
        {
            sum=sum*k+(num[i]-'A')+10;
        }
    }
    if(sum==0)
    {
        printf("0\n");
        return 0;
    }
    memset(num,0,sizeof(num));
    transform(sum,t,num);
    for(i=strlen(num)-1;i>=0;i--)
    {
        printf("%c",num[i]);
    }
    printf("\n");
    return 0;
}

第3个回答  2014-11-30
#include <stdio.h>
int main()
{
int d=0,i;
char hex[100];
printf("input hex string: " );
scanf("%s", hex );
for(i=0;hex[i];i++ )
{
if ( hex[i] >='A' && hex[i]<='F')
d = d*16+hex[i]-'A'+10 ;
else if ( hex[i] >='a' && hex[i]<='f')
d = d*16+hex[i]-'a'+10 ;
else
d = d*16 +hex[i]-'0' ;
}
printf("%d\n", d );
return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网