Why do we use n = 16 * n + hexdigit

我的主力博客:半畝方塘

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.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章