There is a program to convert a string of hexadecimal digits into its equivalent integer value as below.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
enum loop {NO, YES};

/* htoi: convert hexadecimal string s to integer */
int htoi(char s[])
{
int hexdigit, i, n;
enum loop inhex;

i = 0;
if (s[i] == '0') { /* skip optional 0x or 0X */
++i;
if (s[i] == 'x' || s[i] == 'X')
++i;
}
n = 0; /* integer value to be returned */
inhex = YES; /* assume valid hexadecimal digit */
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;
}

Why do we use n = 16 * n + hexdigit to compute the value ? The figure below gives the reason.

Similarly, we can use n = 8 * n + octdigit to convert octal string, we can use n = 2 * n + bindigit to convert binary string, too.

A program to convert hexadecimal string.


Reference

The C Programming Language