为了防止函数名与C语言库函数atoi冲突,所以将这个函数加了_my。下面是代码运行的截图:
【atoi接口实现使用效果图】
实现的atoi_my的代码如下:
int atoi_my(char* pstr)
{
//atoi接口实现方法
int intVal = 0; // 返回值
// 符号, 正数为 1, 负数为 -1
int sign = 1;
// 判断指针是否为空 pstr == NULL
if(pstr == 0)
return 0;
// 跳过前面的空格字符 ' ' 的 ascii 值 0x20
while(' '== *pstr)
pstr++;
// 判断正负号
if('-'==*pstr)
sign = -1;
if('-'==*pstr || '+'==*pstr)
pstr++;// 如果是符号, 指针后移
while(*pstr >= '0' && *pstr <= '9')
{
// 逐字符转换成整数
// 转换说明
// ascii 的 '0' = 0x30 转换为int以后 - 0x30即为整型的0
// ascii 的 '1' = 0x31 转换为int以后 - 0x30即为整型的1
// ...
intVal = intVal * 10 + (((int)*pstr)-0x30);// 十进制即每位乘10, 结果累加保存
pstr++;// 指针后移
}
return intVal * sign;// 返回结果,int32 范围是: 2147483647 ~ -2147483648, 此处会进行溢出运算
}
为了测试正确性,我们就要写一个测试函数main,调用一下这个函数,传入一个数字字符串,看看输出如何,测试代码如下:
#include <stdio.h>
void main()
{
printf("字符串【123451】转换后的数字为:%d\n",atoi_my("123451"));
printf("C++技术网http://www.cjjjs.com\n\n\n");
}
atoi_my函数定义放在main之前即可。至于函数的实现原理,就不分析了。你有兴趣的话,可以自己分析一下。