用C语言实现任意进制之间互相转换
时间: 2024-01-21 15:24:06 浏览: 38
好的,以下是一个实现任意进制之间互相转换的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 将一个任意进制数转换为十进制数
int anyBaseToDecimal(char* num, int base)
{
int result = 0;
int i = 0;
int len = strlen(num);
// 按权展开法
for (i = 0; i < len; i++) {
int digit;
if (num[i] >= '0' && num[i] <= '9') {
digit = num[i] - '0';
} else if (num[i] >= 'A' && num[i] <= 'Z') {
digit = num[i] - 'A' + 10; // A~Z表示的数字
} else {
printf("Invalid input!\n"); // 非法输入
return 0;
}
result = result * base + digit;
}
return result;
}
// 将一个十进制数转换为任意进制数
char* decimalToAnyBase(int num, int base)
{
int quotient = num;
int remainder;
char* result = (char*) malloc(32 * sizeof(char)); // 分配足够的内存空间,最多支持32位进制数
char* buffer = (char*) malloc(32 * sizeof(char));
int i = 0;
// 除基取余法
while (quotient != 0) {
remainder = quotient % base;
quotient = quotient / base;
if (remainder < 10) {
buffer[i++] = remainder + '0';
} else {
buffer[i++] = remainder - 10 + 'A'; // 大于等于10时,使用A~Z表示
}
}
int j = 0;
// 反转字符串
for (j = 0; j < i; j++) {
result[j] = buffer[i-j-1];
}
result[j] = '\0'; // 字符串结尾需要加上'\0'
free(buffer); // 释放内存空间
return result;
}
// 将一个任意进制数转换为另一个任意进制数
char* anyBaseToAnyBase(char* num, int from, int to)
{
int decimal = anyBaseToDecimal(num, from); // 先将任意进制数转换为十进制数
char* result = decimalToAnyBase(decimal, to); // 再将十进制数转换为目标进制数
return result;
}
int main()
{
char* num = "12345";
int from = 10; // 数字是10进制
int to = 16; // 转换为16进制
char* result = anyBaseToAnyBase(num, from, to);
printf("%s in base %d: %s in base %d\n", num, from, result, to);
free(result); // 释放内存空间
return 0;
}
```
以上代码可以将一个任意进制数转换为另一个任意进制数。你可以根据自己的需要来修改进制数和测试数据。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)