#include #include typedef unsigned long ul; ul toul(const char *cp) { ul result=0, value, base=10; if (*cp == '0') { base = 8; cp++; if ((*cp == 'x') && isxdigit(cp[1])) { cp++; base = 16; } } while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp) ? toupper(*cp) : *cp)-'A'+10) < base) { result = result*base + value; cp++; } return result; } int main(void) { printf("%ld\n", toul("123")); printf("%ld\n", toul("0123")); printf("%ld\n", toul("0x123")); printf("%ld\n", toul("0xff")); return 0; }