C语言十进制和十六进制的转化
时间: 2024-09-28 21:04:59 浏览: 36
C语言提供了内置的库函数来进行十进制(decimal)和十六进制(hexadecimal)之间的转换。主要的函数包括`printf()`和`scanf()`用于格式化输出和输入,以及`itoa()`、`atol()`等函数用于字符串到整数的转换。
**1. 十进制转十六进制**:
- 使用`printf()`或`fprintf()`函数,配合`%x`或`%X`格式说明符,可以直接将十进制数值转换为十六进制字符串输出:
```c
int decimal = 123;
char hex[10];
sprintf(hex, "%x", decimal); // 输出 "7b" (小写)
sprintf(hex, "%X", decimal); // 输出 "7B" (大写)
```
**2. 十六进制转十进制**:
- 使用`strtol()`或`strtoul()`函数可以从十六进制字符串解析出对应的十进制整数:
```c
char hex_str[] = "7b";
int decimal_num = strtol(hex_str, NULL, 16); // 输出 123
```
**3. 字符串转换**:
如果你想直接操作字符数组,可以用循环遍历每一位数字并计算总和:
```c
char hex_str[] = "7b";
int decimal_num = 0;
for (int i = 0; hex_str[i] != '\0'; ++i) {
if (hex_str[i] >= '0' && hex_str[i] <= '9') {
decimal_num += hex_str[i] - '0';
} else if (hex_str[i] >= 'A' && hex_str[i] <= 'F') {
decimal_num += (hex_str[i] - 'A' + 10);
} else if (hex_str[i] >= 'a' && hex_str[i] <= 'f') {
decimal_num += (hex_str[i] - 'a' + 10);
}
}
```
**相关问题--:**
1. C语言如何从字符串读取十六进制数?
2. `itoa()`函数在C中有什么作用?
3. 如何在C中处理超过整型范围的十六进制转换?
阅读全文