一、基本概念
在计算机中,数字一般采用二进制形式表示。十六进制是二进制的一种表现形式,更加简洁易读。
十进制是我们平时最常用的数字表示方式,是用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]<='9') { // 数字0~9 num = num*16 + hex[i]-'0'; // 乘以十六,再累加 } else if (hex[i]>='a' && hex[i]<='f') { // 小写字母a~f num = num*16 + hex[i]-'a'+10; // 乘以十六,再累加 } else if (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"开头的,否则可能会导致错误结果。
对于以上代码,可以根据具体需求进行改进,比如加入错误输入的处理、优化递归过程、加入头文件等等。