一、基本概念
在計算機中,數字一般採用二進制形式表示。十六進制是二進制的一種表現形式,更加簡潔易讀。
十進制是我們平時最常用的數字表示方式,是用0~9這10個數字來表示任何一個數的數值大小。而十六進制則是用0~9這10個數字加上A~F這6個字母來表示任何一個數的數值大小,其中A~F分別代表數字10~15。
二、基本轉換方法
將十進制數轉換成十六進制數一般採用”除以十六取餘數法”,即:
void DecToHex(int n) {
int remainder, quotient;
if (n < 16) {
if (n < 10) { // n為0~9
printf("%d", n);
} else { // n為10~15
printf("%c", 'A'+(n-10));
}
return;
}
remainder = n % 16; // 除以16,得到餘數
quotient = n / 16; // 除以16,得到商
DecToHex(quotient); // 遞歸調用
if (remainder < 10) { // remainder為0~9
printf("%d", remainder);
} else { // remainder為10~15
printf("%c", 'A'+(remainder-10));
}
}
將十六進制數轉換成十進制數一般採用”乘以十六累加法”,即:
int HexToDec(char *hex) {
int i, len, num=0;
len = strlen(hex);
for (i=0; i='0' && hex[i]='a' && hex[i]='A' && hex[i]<='F') { // 大寫字母A~F
num = num*16 + hex[i]-'A'+10; // 乘以十六,再累加
} else {
printf("輸入有誤!\n");
return -1;
}
}
return num;
}
三、實際應用
以地址轉換為例,將整數地址轉換成十六進制格式輸出。
int main() {
int n;
printf("請輸入地址(十進制):");
scanf("%d", &n);
printf("地址(十六進制):0x");
DecToHex(n); // 調用函數
printf("\n");
return 0;
}
以讀取十六進制字符串為例,將十六進制字符串轉換成十進制格式輸出。
int main() {
char hex[20];
int n;
printf("請輸入十六進制字符串:");
scanf("%s", hex);
n = HexToDec(hex); // 調用函數
if (n != -1) {
printf("整數為:%d\n", n);
}
return 0;
}
四、注意事項
在進行進制轉換時,需要注意數據類型的範圍,避免數據溢出。另外,輸入的十六進制數字符串必須是以”0x”開頭的,否則可能會導致錯誤結果。
對於以上代碼,可以根據具體需求進行改進,比如加入錯誤輸入的處理、優化遞歸過程、加入頭文件等等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/233674.html
微信掃一掃
支付寶掃一掃