https://www.learntosolveit.com/ is my project that helped me become a software engineer. I continue to work on this fundamental project to help myself and others become good programmers. The project now is a companion website to learn C programming using K&R book. It uses modern tools, and is designed to be used along with the book.
Write a function htoi(s), which converts a string of hexadecimal digits (including an optional 0x or 0X) into its equivalent integer value. The allowable digits are 0 through 9, a through f,and A through F.
#include <stdio.h>
#define MAXLINE 100
#define BASE 16
int mgetline(char line[], int lim);
unsigned int htoi(const char s[], int len);
int main(void) {
    char line[MAXLINE];
    int len;
    unsigned int value;
    len = mgetline(line, MAXLINE);
    value = htoi(line, len);
    printf("The value of %s is %u \n", (char *) line, value);
    return 0;
}
int mgetline(char line[], int lim) {
    int c, i;
    for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
        line[i] = (char) c;
    line[i] = '\0';
    return i;
}
unsigned int htoi(const char s[], int len) {
    int digit;
    int power = 1;
    unsigned int result = 0;
    int end_index = 0;
    if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
        end_index = 2;
    }
    for(int i=len-1; i>=end_index; i--) {
        if (s[i] >= '0' && s[i] <= '9') {
            digit = (s[i] - '0');
        } else if (s[i] >= 'a' && s[i] <= 'f') {
            digit = (s[i] - 'a') + 10;
        } else if (s[i] >= 'A' && s[i] <= 'F') {
            digit = (s[i] - 'A') + 10;
        }
        result += digit * power;
        power *= BASE;
    }
    return result;
}
Example output
$ ./a.out
DEADBEEF
The value of DEADBEEF is 3735928559
$ ./a.out
0xDEADBEEF
The value of 0xDEADBEEF is 3735928559
Review the discussions and analysis of the program here 
https://www.learntosolveit.com/cprogramming/chapter2/ex_2.3_htoi 
              
    
Top comments (2)
You know that strtoull(3) exists, right?
Yes. These exercises from book are learning exercises. In real world programs, I will use
strtoull.