16进制转换成10进制

yangyira2 2006-11-27 07:02:53
#include <stdio.h>

int main()
{
char b[]="11";int i;int j;
int len,a[20],sum=0;
len=strlen(b);
for(i=0;i<len;i++)
{
switch(b[i])
{case '0':a[i]=0;break;
case '1':a[i]=1;break;
case '2':a[i]=2;break;
case '3':a[i]=3;break;
case '4':a[i]=4;break;
case '5':a[i]=5;break;
case '6':a[i]=6;break;
case '7':a[i]=7;break;
case '8':a[i]=8;break;
case '9':a[i]=9;break;
case 'a':a[i]=10;break;
case 'b':a[i]=11;break;
case 'c':a[i]=12;break;
case 'd':a[i]=13;break;
case 'e':a[i]=14;break;
case 'f':a[i]=15;break;

default: printf("error\n");}

}
for(i=0;i<len;i++)
{
for(j=i;j<len-1;j++)
a[i]*=16;
len--;
sum+=a[i];
}
printf("%d",sum);
getch();
}



最后已位没加上,不知道杂会事

如:1a 结果事16,不是26
...全文
357 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
poemdreamer 2006-11-28
  • 打赏
  • 举报
回复
linux下:
sum=strtoul(bb,NULL,16);
mitsuki 2006-11-28
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#include<ctype.h>

int main()
{
char *ptr;
char input[100];
char buff[100];

int i,j,len=0;
int count=0;
int sum=0;


ptr=input;

printf("please input a HEX number:");
scanf("%s",ptr);
len=strlen(ptr);



while(count<len)
{
*ptr=tolower(*ptr);
if((*ptr)>96&&(*ptr)<103)
{
(*ptr)%=90;
buff[count]=(*ptr)+3;
}
if((*ptr)>48&&(*ptr)<59)
{
(*ptr)%=40;
buff[count]=(*ptr)-8;
}
count++;
ptr++;
}

ptr=buff;
for(i=len;i>0;i--)
{
for(j=0;j<i-1;j++)
{
(*ptr)*=16;
}

sum+=(*ptr);
ptr++;
}

printf("the result is %d\n",sum);
getchar();

return 0;
}
KUCHIBUE 2006-11-28
  • 打赏
  • 举报
回复
为什么不用
sscanf("1a", "%x", &ii);
....一定要自己写吗...
apricot0819 2006-11-28
  • 打赏
  • 举报
回复
你的好乱.我帮你改改吧

for(i=0;i<len;i++)
{
for(j=i;j<len-1;j++)
a[i]*=16;
len--;
sum+=a[i];
}
改成这样
for(i=0;i<len-1;i++)
sum=(sum+a[i])*16;

sum = sum+ a[i] ;

你再试试

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧