一、基本概念
在計算機中,數字一般採用二進制形式表示。十六進制是二進制的一種表現形式,更加簡潔易讀。
十進制是我們平時最常用的數字表示方式,是用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-hant/n/233674.html