一、基本概念

在计算机中,数字一般采用二进制形式表示。十六进制是二进制的一种表现形式,更加简洁易读。

十进制是我们平时最常用的数字表示方式,是用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”开头的,否则可能会导致错误结果。

对于以上代码,可以根据具体需求进行改进,比如加入错误输入的处理、优化递归过程、加入头文件等等。