小弟有一问题,请教各位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是什么意思?
--------
字符 --> 数字 吧