Convert Hexadecimal String to Integer Without strtol or sscanf functions

Code

#include <stdio.h>
#include <stdint.h>

uint16_t hex_to_uint(const char *str) {
    uint16_t res = 0; 
    
    for (int i = 0; str[i] != '\0'; i++)
    {
        res <<= 4;
        int digit = str[i] - '0';
         
        if ((str[i] >= 'A') && (str[i] <= 'F'))
        {
            digit = (str[i] - 'A' + 10); 
        }
        else if ((str[i] >= 'a') && (str[i] <= 'f'))
        {
            digit = (str[i] - 'a' + 10); 
        }

        res |= digit;
    }

    return res;

/*
input: 1A3F
res: 0
output: 6719

'F' - 'A' + 10 = 15; 

*/
}

int main() {
    char hex[10];
    scanf("%s", hex);

    printf("%u", hex_to_uint(hex));
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1A3F

Expected Output

6719