总结了网上看的一些资料,结合他们各自的优点,修正了一些bug,写了一个自己的itoa()函数。
大家可以指出不正之处,共同讨论。
const char charIndex[]="0123456789ABCDEF";
void myitoa(int num,char *buf,int radix)
{
char temp;
int i = 0, j = 0;//j指向第一个存有数字字符的字节
if(num < 0)
{
num = -num;//如果是负数,先转换成正数
if(10 == radix)//如果是十进制,在字符串前面加负号 -
{
buf[i++] = '-';
j = 1;//因为前面多了一个负号,所以 j 加1
}
}
do//依次取出最低位,存储到buf
{
buf[i++] = charIndex[num % radix];//取最后一位数转换
num = num / radix;//删除最后一位
}while(num > 0);
buf[i--] = '\0';//最后加上字符串结束符,i自减,指向最后一个存有数字字符的字节
while(j < i)//此时j指向第一个数字字符,i指向最后一个数字字符,开始交换字符
{
temp = buf[i];
buf[i] = buf[j];
buf[j] = temp;
++j;
--i;
}
}