首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟有一有关问题,c语言高手

2012-03-01 
小弟有一问题,请教各位c语言高手!以下是一个十六进制转十进制的函数:main(){chars[]inti,n0for(i0s[i

小弟有一问题,请教各位c语言高手!
以下是一个十六进制转十进制的函数:
main()
  {char   s[];
    int   i,n=0;
    for(i=0;s[i]!= '\0 ';i++)
        {if(s[i]> = '0 '&&s[i] <= '9 ')
              n=n*16+s[i]- '0 ';
          if(s[i]> = 'a '&&s[i] <= 'f ')
              n=n*16+s[i]- 'a '+10;
          if(s[i]> = 'A '&&s[i] <= 'F ')
              n=n*16=s[i]- 'A '+10;
          }
printf( "%d\n " 's[i]);
}
(大概就是以上)
我想知道s[i]- '0 '和s[i]- 'a '+10是什么意思?字符是按ascii码值计算的?那也不对啊?
求教高手给解释下,
谢谢!分不多,包涵了~


[解决办法]
// 小改一下可以运行,如下:
#include <stdio.h>

void main()
{
char s[] = "e90f ";
int i, n = 0;
for ( i = 0; s[i] != '\0 '; i++)
{
//如果s[i]的字符为数字则
//s[i] - '0 ' 表示s[i] 和 '0 'ascii码值之差
//及代表对应10进制的值
if (s[i] > = '0 '&& s[i] <= '9 ')
n = n*16 + s[i] - '0 ';

//同样s[i] - 'a '表示s[i] 和 'a ' ascii码值之差
//而16进制中a代表10所以都加上10,代表对应10进制的值
if (s[i] > = 'a ' && s[i] <= 'f ')
n = n*16 + s[i] - 'a ' + 10;
// 与上面是一样的道理
if (s[i] > = 'A ' && s[i] <= 'F ')
n = n*16 + s[i] - 'A ' + 10;
}

printf( "%d\n ", n);

}
[解决办法]
查一下ascii碼表,相信就可以明白了
[解决办法]
s[i]- '0 ' 是s[i]的ascii码减0的ascii码,由于0-9的ascii码是按顺序排列的,则s[i]- '0 '得到的就是s[i]实际所代表的十进制数。同样的,s[i]- 'a '+10也是一样的意思,加10是应为字符a在代表十进制的10
[解决办法]
查一下ascii码表
[解决办法]
s[i]- '0 '和s[i]- 'a '+10是什么意思?

--------
字符 --> 数字 吧

热点排行
Bad Request.