从简单到复杂的例子:
/是取整,%是求余
例1:
/*将整数转化为字符串*/
#include<stdio.h>
void main(void)
{
int a = 1234;
while(a)
{
printf("data = %d\r\n",a % 10);
a /= 10;
}
}
例2:
void main(void)
{
int a = 8234;
signed char i=0, j = 0;
char buf[10] = {0};
char *p = buf;
while(a)
{
*(p++) = (char)(a % 10) + '0'; //1. 求a的个位数 2.将a的个位数转换为字符串(ASCII表)3. 将求的个位字符串存在指针p指向的地址,该地址需要累加
a /= 10; // 4. 去掉个位
j++; //位数计数
}
//5. buf里面存的数据是逆序的,需要逆序输出
for(i=(j-1);i>=0;i--)
{
printf("%c",buf[i]);
if(0==i)
{
printf("\r\n");
}
}
}
例3:
#include<stdio.h>
/*将整数转化为字符串*/
void my_itoa(int val, char *buf)
{
signed char i=0, j = 0;
char tmp_buf[10] = {0};
char *p = tmp_buf;
while(val)
{
*(p++) = (char)(val % 10) + '0'; //1. 求a的个位数 2.将a的个位数转换为字符串(ASCII表)3. 将求的个位字符串存在指针p指向的地址,该地址需要累加
val /= 10; // 4. 去掉个位
j++; //位数计数
}
//5. buf里面存的数据是逆序的,需要逆序输出
for(i=(j-1);i>=0;i--)
{
buf[j-i-1] = tmp_buf[i];
}
}
/*主函数*/
void main(void)
{
int a[4] = {1234,34,23,9};
unsigned char i = 0;
char g_buf[10] = {0};
for(i=0;i<4;i++)
{
my_itoa(a[i], g_buf);
printf("%s\r\n",g_buf);
memset(g_buf,0,10);
}
}
例4:
#include<stdio.h>
/*将整数转化为字符串*/
void my_itoa(signed int val, char *buf)
{
signed char i=0, j = 0;
char tmp_buf[10] = {0};
char *p = tmp_buf;
unsigned char sign_flag = 0;
if(val < 0)
{
val = -val;
sign_flag = 1; //符号标志。
}
while(val)
{
*(p++) = (char)(val % 10) + '0'; //1. 求a的个位数 2.将a的个位数转换为字符串(ASCII表)3. 将求的个位字符串存在指针p指向的地址,该地址需要累加
val /= 10; // 4. 去掉个位
j++; //位数计数
}
/*负数,需要再加符号位*/
if(1 == sign_flag)
{
*p++ = '-';
j++;
}
*p++ = '\0';
//5. buf里面存的数据是逆序的,需要逆序输出
for(i=(j-1);i>=0;i--)
{
buf[j-i-1] = tmp_buf[i];
}
}
/*主函数*/
void main(void)
{
signed int a[4] = {1234,-20,23,-9};
unsigned char i = 0;
char g_buf[10] = {0};
for(i=0;i<4;i++)
{
my_itoa(a[i], g_buf);
printf("%s\r\n",g_buf);
memset(g_buf,0,10);
}
}
例4,执行结果: