字符串转整数例程源码:
#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];
}
}
/*将字符串转化为整数*/
int my_atoi(char *buf)
{
int tmp_data = 0;
char i=0;
signed char sign = 1;
if('-' == buf[i]) //负数
{
i++;
sign = -1;
}
else if('+' == buf[i]) //带符号的正数
{
i++;
sign = 1;
}
else //没带符号的正数
{
sign = 1;
}
while(buf[i]!='\0')
{
tmp_data *= 10;
tmp_data += (buf[i++]%'0'); //tmp_data = tmp_data*10+(buf[i++]-'0'); 表示方法2.
}
return sign*tmp_data;
}
/*主函数*/
void main(void)
{
signed int a[4] = {1234,-20,23,-9};
unsigned char i = 0;
char g_buf[10] = {0};
char tmp_s[] = "-369";
printf("整数转字符串:\r\n");
for(i=0;i<4;i++)
{
my_itoa(a[i], g_buf);
printf("%s\r\n",g_buf);
memset(g_buf,0,10);
}
printf("字符串转整数:\r\n");
printf("%d\r\n",my_atoi(tmp_s));
printf("%d\r\n",my_atoi("-4568"));
printf("%d\r\n",my_atoi("+1234"));
}