c语言任意进制转换,使用一些简单的函数2
时间: 2024-10-25 10:17:45 浏览: 21
在C语言中,将任意进制的数转换成十进制,常用的方法是通过遍历每一位数字并乘以对应的权重来进行累加。这里我们可以创建两个简单函数,一个用于从给定字符串表示的任意进制转换为十进制,另一个则相反,将十进制转换回任意进制。
首先,我们定义一个函数`decimalToAnyBase`用于十进制转任意进制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int decimalToAnyBase(int num, int base) {
char* str = (char*)malloc(sizeof(char) * (num > 0 ? log10(num) + 1 : 1));
sprintf(str, "%d", num);
long result = strtol(str, NULL, base); // 使用strtol函数解析字符串到指定进制
free(str);
return result;
}
// 示例
int main() {
int decimal_num = 15; // 十进制数
int target_base = 16; // 目标进制
int converted_num = decimalToAnyBase(decimal_num, target_base);
printf("十进制 %d 转换成十六进制是 %d\n", decimal_num, converted_num);
return 0;
}
```
然后,我们定义一个辅助函数`anyBaseToDecimal`用于任意进制转十进制:
```c
#include <stdio.h>
long anyBaseToDecimal(const char* num_str, int base) {
long value = 0;
int len = strlen(num_str);
for (int i = len - 1; i >= 0; i--) {
value += (strtol(num_str + i, NULL, base) * pow(base, len - 1 - i));
}
return value;
}
// 示例
void arbitraryBaseToDecimalExample() {
const char* hex_str = "A"; // 十六进制字符串
int base = 16;
int decimal_num = anyBaseToDecimal(hex_str, base);
printf("十六进制 '%s' 转换成十进制是 %d\n", hex_str, decimal_num);
}
```
记得在实际使用这两个函数之前,检查输入的有效性和边界条件,比如目标进制是否合法,以及字符串是否正确表示了所选的进制数。
阅读全文