16進数から10進数へ変換するhtoi関数

K&R本 演習2-3

16進数の文字列(0xあるいは0Xが付いているものも含めて)をそれと同値な整数値へ変換する関数htoi(s)を書け。許される文字は0から9とaからfおよびAからFである。

#include <stdio.h>

int htoi (const char *s) {
    int n;
    if ( *s != '0' || !(*(s+1) != 'x' || *(s+1) != 'X') ) {
        return 0;
    }
    
    for(n=0,s+=2;*s;s++){
        if ( *s >= '0' && *s <= '9' ) {
            n = 16 * n + (*s - '0');
        }
        else if ( *s >= 'a' && *s <= 'f' ) {
            n = 16 * n + ((*s - 'a') + 10);
        }
        else if ( *s >= 'A' && *s <= 'F' ) {
            n = 16 * n + ((*s - 'A') + 10);
        }
    }
    
    return n;
}

int main(void) {
    printf("%d",htoi("0xff"));
    return 0;
}

できました。atoi関数の応用ですね。マイナス値に関しては考慮してないのであしからず。