C语言实现任意进制转换器的攻略如下:
介绍
进制转换是计算机科学中的一个基本问题。通常我们使用十进制作为计算的基础,但在某些场合下,如计算机领域中,可能需要十六进制或二进制来表示数据。因此,实现任意进制转换器是非常有用的。
操作步骤
实现任意进制转换器,需要以下的步骤:
- 输入要转换的数和当前进制;
- 将输入的数转换为十进制;
- 将十进制数转换为目标进制;
- 输出结果。
下面是示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 将字符转换为相应的数字,如'A'对应10,'B'对应11
int digit_to_num(char c)
{
if (c >= '0' && c <= '9')
return c - '0';
else if (c >= 'A' && c <= 'Z')
return c - 'A' + 10;
else if (c >= 'a' && c <= 'z')
return c - 'a' + 10;
else
return -1;
}
// 将十进制数转换为目标进制,返回字符串形式的结果
char *convert(long long num, int base)
{
char conversion[] = "0123456789ABCDEF";
char result[100];
int i = 0;
while (num > 0)
{
result[i++] = conversion[num % base];
num /= base;
}
result[i] = '\0';
char *output = malloc(strlen(result) + 1);
strcpy(output, result);
strrev(output);
return output;
}
int main()
{
char input[100];
int base1, base2;
long long num = 0;
int i, digit;
printf("请输入要转换的数和当前进制:");
scanf("%s %d", input, &base1);
int len = strlen(input);
for (i = 0; i < len; i++)
{
digit = digit_to_num(input[i]);
if (digit < 0 || digit >= base1)
{
printf("输入错误!\n");
return -1;
}
num = num * base1 + digit;
}
printf("请输入目标进制:");
scanf("%d", &base2);
if (base2 < 2 || base2 > 36)
{
printf("目标进制应在2-36之间!\n");
return -1;
}
char *output = convert(num, base2);
printf("%s\n", output);
free(output);
return 0;
}
示例
示例1
将二进制数10011011转换为十六进制:
请输入要转换的数和当前进制:10011011 2
请输入目标进制:16
9B
可以看到,输入的二进制数10011011被转换为十进制155,再转换为十六进制9B。
示例2
将十进制数1234转换为八进制:
请输入要转换的数和当前进制:1234 10
请输入目标进制:8
2322
可以看到,输入的十进制数1234被转换为八进制2322。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现任意进制转换器 - Python技术站