[我试图理解将十六进制数转换为其十进制等效项的过程,尤其是当将每个十六进制数字转换为其十进制值时。
当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; }
任何解释将不胜感激。
谢谢。
我试图理解将十六进制数转换为其十进制等效项的过程,尤其是在将每个十六进制数字转换为其十进制值时。说... ... >>
48是'0'的ASCII码; [a]和[a]的ASCII码分别为65(55 = 65-10)和97(87 = 97-10)。