There is a program to convert a string of hexadecimal digits into its equivalent integer value as below.
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.