在了解了c语言中atoi和itoa函数以后,分别对其进行了实现。并以这两个函数为基础编写了一个任意进制的相互转换器。过程可分为两个步骤,先将任意进制的字符串转利用atoi函数换成10进制数,再将10进数输通过itoa转成对应进制的整形进行输出。
c源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
输入
10进制数,并返回字符串头指针
char* myitoa(
int value,
char *str,
int radix)
{
int stack[
100] = {
0},top=
0;
char *head = str;
while(value!=
0)
{
stack[++top]=value%radix;
value = value/radix;
}
while(top!=
0)
{
if(radix<
10)
{
*(str++) =
stack[top--]+
'0';
}
else
{
if(
stack[top]>=
10)
{
*(str++) =
stack[top--]-
10+
'a';
}
else
*(str++) =
stack[top--]+
'0';
}
}
*(str) =
'\0';
return head;
}
int power(
int a,
int n)
{
int tmp = a;
if(n==
0)
{
return 1;
}
else
{
while(n-->
1)
{
tmp = tmp*a;
}
return tmp;
}
}
#if 1
int myatoi(
char *str,
int radix)
{
int l =
strlen(str);
int sum =
0,tmp =
0,i =
0;
for(i =
0;i<l;i++)
{
if(radix<
10)
{
tmp = *(str+i)-
'0';
tmp = power(radix,l-
1-i)*tmp;
sum = sum + tmp;
}
else
{
tmp = *(str+i)-
'0';
if(tmp<
10&&tmp>=
0)
{
tmp = power(radix,l-
1-i)*tmp;
sum = sum + tmp;
}
else
{
tmp = *(str+i)-
'a'+
10;
tmp = power(radix,l-
1-i)*tmp;
sum = sum + tmp;
}
}
}
return sum;
}
#endif
int main()
{
char *str =
malloc(
20);
int radix =
0,tmp =
0;
printf(
"input number string:");
gets(str);
printf(
"input original radix:");
scanf(
"%d",&radix);
tmp = myatoi(str,radix);
printf(
"input radix what to exchange:");
scanf(
"%d",&radix);
str = myitoa(tmp,str,radix);
printf(
"result:%s\n",str);
return 0;
}
运行结果
这里将10进制数1234转换成12进制数,结果为86a,又将12进制数86a转换成10进制数,结果为1234。该程序只要输入需要转换的数据,数据的进制数和需要输出的进制数就可以得到结果。
转载请注明原文地址: https://ju.6miu.com/read-1201857.html