C语言通过函数实现 itoa()的功能 将整数转换成字符串 并实现进制转换

C语言通过函数实现 itoa()的功能 将整数转换成字符串 并实现进制转换#include<stdio.h>
#include<string.h>
#define P printf


/*void printd(int n)
{
if(n<0)
{
putchar('-');
n= -n;
}


if(n/10)
{
    printd(n/10);
}
putchar(n%10+'0');
}*/


/*
下面的两行代码可以推敲出 //加字符0 自动从数值转换成字符型
  P("%d %d %c\n",4,'4','4'-4);
    P("%d %d %c\n",5,'5','5'-5);*/


/*char* itoa_digui(int n,char* ch)
{   static int i=0;


    if(n<0)
{


ch[0]=45;
n= -n;
P("%c i=%d \n",ch[i],i);
i++;
}


if(n/10)
{
    itoa_digui(n/10,ch);
}
ch[i]=(n%10+'0');
    P("%c i=%d \n",ch[i],i);
i++;



return ch;
}*/


char* itoa(int n,char* ch,int x)
{
    int i=0,len=0,j=0;
    char ch0[100]={0};


if (x<=2)
{//二进制
x=2;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
    for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//二进制


else if(x>8&&x<16)
{//十进制
x=10;
while(n>=1)
{
//P("n=%d\n",n);
ch0[i]=n%x+'0';
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
    for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十进制


else if(x>=16)
{//十六进制
x=16;
while(n>=1)
{
//P("n=%d\n",n);
if(n%x>10)
{
ch0[i]=n%x+'7';
}
else
{
ch0[i]=n%x+'0';
}
n=n/x;
P("%c i=%d \n",ch0[i],i);
i++;
}
len=strlen(ch0);
P("len=%d\n",len);
    for(i=len-1;i>=0;i--)
{
ch[j]=ch0[i];
P("%c i=%d \n",ch[j],j);
j++;
}
}//十六进制


ch[j]=0;
return ch;


}




void main()
{  


int a=0;
char ch[100]={0};
P("请输入一个整数:\n");
scanf("%d",&a);
P("\n%s\n",itoa(a,ch,16));
/*下面三行代码显示十六进制的a的ascii=10+55   10+'7'
    P("%d %d %d %c\n",10,11,12,55);
P("%d %d %d\n",'A','B','C');*/
getchar();
getchar();


}