c语言中16进制转换为十进制
答案:3 悬赏:80 手机版
解决时间 2021-03-24 19:07
- 提问者网友:皆是孤独
- 2021-03-24 11:30
c语言中16进制转换为十进制
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-03-24 12:01
一、问题描述
十进制数是指各位数字全部由小于10的数字(0..9)组成的数值,如123、45678等。十六进制数是指各位数字全部由小于16的数字(0..9,a..f)组成的数值,如ffff、1e5a等。将十进制数转换为十六进制数是将全部由小于10的数字组成的数值转换为全部由小于16的数字组成的数值,如十进制数100转换为二进制数为64。
二、算法分析
逐个取出16进制数值各数字组成的字符串中的字符,得到它的序号(0..15),累加序号乘以16的n次方的和,n按0、1、2的规律变化。最终的累加和即为转换后的十进制数。
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}
三、参考程序
#include
#include
long hexToDec(char *source);
int getIndexOfSigns(char ch);
int main()
{
char *hex = "75BCD15";
printf("16进制数: %s
", hex);
printf("10进制数: %ld
", hexToDec(hex));
return 0;
}
long hexToDec(char *source)
{
long sum = 0;
long t = 1;
int i, len;
len = strlen(source);
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}
return sum;
}
int getIndexOfSigns(char ch)
{
if(ch >= '0' && ch <= '9')
{
return ch - '0';
}
if(ch >= 'A' && ch <='F')
{
return ch - 'A' + 10;
}
if(ch >= 'a' && ch <= 'f')
{
return ch - 'a' + 10;
}
return -1;
}
四、运行测试
16进制数: 75BCD15
10进制数: 123456789
十进制数是指各位数字全部由小于10的数字(0..9)组成的数值,如123、45678等。十六进制数是指各位数字全部由小于16的数字(0..9,a..f)组成的数值,如ffff、1e5a等。将十进制数转换为十六进制数是将全部由小于10的数字组成的数值转换为全部由小于16的数字组成的数值,如十进制数100转换为二进制数为64。
二、算法分析
逐个取出16进制数值各数字组成的字符串中的字符,得到它的序号(0..15),累加序号乘以16的n次方的和,n按0、1、2的规律变化。最终的累加和即为转换后的十进制数。
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}
三、参考程序
#include
#include
long hexToDec(char *source);
int getIndexOfSigns(char ch);
int main()
{
char *hex = "75BCD15";
printf("16进制数: %s
", hex);
printf("10进制数: %ld
", hexToDec(hex));
return 0;
}
long hexToDec(char *source)
{
long sum = 0;
long t = 1;
int i, len;
len = strlen(source);
for(i=len-1; i>=0; i--)
{
sum += t * getIndexOfSigns(*(source + i));
t *= 16;
}
return sum;
}
int getIndexOfSigns(char ch)
{
if(ch >= '0' && ch <= '9')
{
return ch - '0';
}
if(ch >= 'A' && ch <='F')
{
return ch - 'A' + 10;
}
if(ch >= 'a' && ch <= 'f')
{
return ch - 'a' + 10;
}
return -1;
}
四、运行测试
16进制数: 75BCD15
10进制数: 123456789
全部回答
- 1楼网友:玩家
- 2021-03-24 12:56
int PowerXY(int x, int y)
{
if(y == 0)
return 1 ;
else
return x * PowerXY(x, y -1 ) ;
}
int Convert16To10(int number)
{
int r = 0 ;
int i = 0 ;
int result = 0 ;
while(number)
{
r = number % 16 ;
result += r * PowerXY(16, i++) ;
number /= 16 ;
}
return result ;
}
{
if(y == 0)
return 1 ;
else
return x * PowerXY(x, y -1 ) ;
}
int Convert16To10(int number)
{
int r = 0 ;
int i = 0 ;
int result = 0 ;
while(number)
{
r = number % 16 ;
result += r * PowerXY(16, i++) ;
number /= 16 ;
}
return result ;
}
- 2楼网友:西风乍起
- 2021-03-24 12:39
#include
long fun(char*s);
#define N 50
void main()
{
long m;
char s[N];
printf("输入十六进制数: ");
scanf("%s",s);
m=fun(s);
printf("%ld",m);
}
long fun(char*s)
{
int i,t;
long sum=0;
for(i=0;s[i];i++)
{
if(s[i]<='9')t=s[i]-'0';
else t=s[i]-'a'+10;
sum=sum*16+t;
}
return sum;
}
我运行过了,能够得出正确答案
long fun(char*s);
#define N 50
void main()
{
long m;
char s[N];
printf("输入十六进制数: ");
scanf("%s",s);
m=fun(s);
printf("%ld",m);
}
long fun(char*s)
{
int i,t;
long sum=0;
for(i=0;s[i];i++)
{
if(s[i]<='9')t=s[i]-'0';
else t=s[i]-'a'+10;
sum=sum*16+t;
}
return sum;
}
我运行过了,能够得出正确答案
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯