以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。
例如,输入的字符串为:556,则输出十进制整数366
#include
void main()
{ char s[6]; int n,j;
gets(s);
if(s[0]!='\0') n=s[0]-'0';
j=0;
while(s[++j]!='\0') n=n*8+s[j]-'0';
printf("%d\n",n);
}
n=n*8+s[j]-'0'这一步为什么要减0呢?
在上述程序中,'0' 在 ASCII 码表中对应的十进制数为 48。当字符串 s 中的字符转换为整数时,可以使用公式 s[j] - '0' 来计算,其中 '0' 用于将字符转换为数字。
例如,如果 s[j] 为 '5',则 s[j] - '0' 的值为 53 - 48 = 5。
这个能得到s[j]这个字符对应的数字。
比如 s[j] 是 ‘3’这个字符,他的ascii码是51 ,‘0’的ascii码是48 , 51-48 = 3
这样就将字符‘3’转换成了数字3
因为s是个char数组,里面存的是个字符,你直接加,加的是ascii码
'0'-'0'=0
'1'-'0'=1
减掉就变数字了