[我试图理解将十六进制数转换为其十进制等效项的过程,尤其是当将每个十六进制数字转换为其十进制值时。
当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)。