最近学习进制转换,发现itoa不是标准的C函数,gcc不支持,网上找了一下,发现有人贴出了代码,不过显示有乱码,改进后正常显示转换了。
#include <stdio.h>
void itoa(unsigned long val, char *buf, unsigned radix)
{
char *p; /* pointer to traverse string */
char *firstdig; /* pointer to first digit */
char temp; /* temp char */
unsigned digval; /* value of digit */
p = buf;
firstdig = p; /* save pointer to first digit */
do
{
digval = (unsigned)(val % radix);
val /= radix; /* get next digit */
/* convert to ascii and store */
if (digval > 9)
*p++ = (char)(digval - 10 + 'a'); /* a letter */
else
*p++ = (char)(digval + '0'); /* a digit */
}
while (val > 0);
/* We now have the digit of the number in the buffer, but in reverse
order. Thus we reverse them now. */
*p-- = '\0'; /* terminate string; p points to last digit */
do
{
temp = *p;
*p = *firstdig;
*firstdig = temp; /* swap *p and *firstdig */
--p;
++firstdig; /* advance to next two digits */
}
while (firstdig < p); /* repeat until halfway */
}
int main(int argc, char *argv[])
{
int a=9;
char bin[40];
itoa(a,bin,2);
printf("%s\n",bin);
return 0;
}