[SWU]c语言 16进制转换为10进制,该怎么处理

[SWU]c语言 16进制转换为10进制
#include <stdio.h>
#define     YES     1
#define     NO      0
int htoi(char s[]);
int main()
{
int i;
char str[10];
scanf("%s",str);
i=htoi(str);
printf("%d\n",i);

}



/*htoi: convert hexadecimal string s to integer*/
int htoi(char s[])
{
    int hexdigit, i, inhex, n;
    
    i = 0;
    if (s[i] == 0){
        ++i;
        if (s[i] == 'x' || s[i] == 'X')
            ++i;
    }
    n = 0;
    inhex = YES;
    for ( ; inhex == YES; ++i){
        if (s[i] >= '0' && s[i] <= '9')
            hexdigit = s[i] - '0';
        else if (s[i] >= 'a' && s[i] <= 'f')
            hexdigit = s[i] - 'a' + 10;
        else if (s[i] >= 'A' && s[i] <= 'F')
            hexdigit = s[i] - 'A' + 10; 
        else 
            inhex = NO;
        
        if (inhex == YES)
            n = 16 * n + hexdigit;
    }
    return n;
}

比如我输入 0x1  执行输出都是0; 哪里错了 求指点
------解决方案--------------------
if (s[i] == 0){
        ++i;
        if (s[i] == 'x' 
------解决方案--------------------
 s[i] == 'X')
            ++i;
    }

这里就错了。改为
if (s[i] =='0'){
        ++i;
        if (s[i] == 'x' 
------解决方案--------------------
 s[i] == 'X')
            ++i;
    }
[/code]