c语言中十六进制非负整数转换十进制非负整数
时间: 2024-10-01 13:11:33 浏览: 47
有关数据结构的栈与队列的C++算法
在C语言中,将十六进制非负整数转换成十进制非负整数可以借助于内置函数`atoi()`、`strtol()`或者手动解析字符串。这里以`strtol()`函数为例,因为它提供了更精细的控制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long long int hex_to_dec(const char *hex_str) {
char hex_chars[] = "0123456789ABCDEF"; // 十六进制字符数组
long long int decimal = 0;
int i = 0;
while (hex_str[i] != '\0') { // 遍历输入的十六进制字符串
if (hex_chars[(hex_str[i] >= 'A' && hex_str[i] <= 'F') ? hex_str[i] - 'A' + 10 : hex_str[i] - '0'] != '\0') { // 转换十六进制字符到对应的值
decimal = decimal * 16 + (hex_chars[strtol(&hex_str[i], NULL, 16)] - '0'); // 乘以16并加上当前位的值
}
i++;
}
return decimal; // 返回转换后的十进制数值
}
int main() {
const char *hex_num = "FF"; // 示例十六进制数
long long int dec_num = hex_to_dec(hex_num);
printf("Hexadecimal %s is equal to decimal %lld.\n", hex_num, dec_num);
return 0;
}
```
阅读全文