在C中将十六进制转换为十进制数时,48和87分别代表什么?

问题描述 投票:0回答:1

[我试图理解将十六进制数转换为其十进制等效项的过程,尤其是当将每个十六进制数字转换为其十进制值时。

当hexVal的数字i等于从'0'到'9'的任何字符时,请说decVal等于hexVal减去48,然后由digitBase计时:]

if ((hexVal[i] >= '0') && (hexVal[i] <= '9')) {
    decVal += (hexVal[i] - 48) * digitBase;
    ...
}

我知道48是ASCII值'0'。我不确定的是,当hexVal的数字i等于范围“ A”至“ F”以及“ a”至“ f”时,值55和87的来源:

else if ((hexVal[i] >= 'A') && (hexVal[i] <= 'F')) {
    hexToDec += (hexVal[i] - 55) * digitBase;
    ...
}

else if ((hexVal[i] >= 'a') && (hexVal[i] <= 'f')) {
    hexToDec += (hexVal[i] - 87) * digitBase;
    ...
}

上面的代码块是从以下函数中提取的,该函数很好地将十六进制数字转换为等效的十进制。

int conv_hex_to_dec(char hexVal[]) {

    int hexToDec = 0;
    int len = strlen(hexVal);
    int digitBase = 1; 

    // Extract hex characters as digits from last character
    for (int i = len - 1; i >= 0; i--) {

        if ((hexVal[i] >= '0') && (hexVal[i] <= '9')) {
            hexToDec += (hexVal[i] - 48) * digitBase;
            digitBase = digitBase * 16;
        }

        else if ((hexVal[i] >= 'A') && (hexVal[i] <= 'F')) {
            hexToDec += (hexVal[i] - 55) * digitBase; 
            digitBase = digitBase * 16;
        }
        else if ((hexVal[i] >= 'a') && (hexVal[i] <= 'f')) {
            hexToDec += (hexVal[i] - 87) * digitBase; 
            digitBase = digitBase * 16;
        }
        else {
            printf("Invalid hex val");
        }
    }

    return hexToDec;
}

任何解释将不胜感激。

谢谢。

我试图理解将十六进制数转换为其十进制等效项的过程,尤其是在将每个十六进制数字转换为其十进制值时。说... ... >>

c numbers hex decimal base
1个回答
0
投票

48是'0'的ASCII码; [a]和[a]的ASCII码分别为65(55 = 65-10)和97(87 = 97-10)。

© www.soinside.com 2019 - 2024. All rights reserved.