请问str2int()字符串转整形数的高效算法

请教str2int()字符串转整形数的高效算法
想来想去,都没有想到什么好的方法,比如下面这种好像太蠢了,请大家指点一下~~多谢^!^多谢^!^
unsigned   int   str2int(unsigned   char   *pBuf)
{
unsigned   int   iValue   =   iCount   =   0;
unsigned   *   pChar   =   pBuf;
while(*pChar   > =   '0 '   &&   *pChar   <=9)
{
iCount++;
pChar++;
}
switch(iCount)
{
case   1:
iValue   =   *pBuf   -   0x30;
break;
case   2:
iValue   =  
break;
.
.
.
}

return   iValue;
}

------解决方案--------------------
int str2int(const char *src)
{
const char *p = src;
int ret = 0;
while (*p!= '\0 ')
ret = ret*10+*p- '0 ';
return ret;
}
------解决方案--------------------
atoi这个很快的
------解决方案--------------------
考虑以下几个关键点:
1、最左侧是非法字符时返回0;
2、如果字符串左侧是数字,右侧是非法字符,则返回左侧数字;
3、转换成的int型数字如果大于或小于int所能表达的数值范围时,返回int的极值

int str2int(const char *str)
{
if (*str != '- ' && isdigit(*str) == 0 || *str == '- ' && isdigit(*(str+1)) == 0 ) return 0;//如果字符串开头不是整数或负数,就返回0
const char *p = str;

bool isMinus = false;
if (*str == '- '){//字符串是负数的情况
isMinus = true;
++p;//指到第一个数字上
}
while(isdigit(*p)) ++p;//把指针p移到左侧第一个非数字字符上

__w64 int len = p - str;
if (isMinus) --len;//数字的长度,不包括负号
--p;
double pow = 1;//10的整数次方
double res = 0;//返回值
for(int i = 0;i < len; ++i){
res += (*p - '0 ') * pow;//将字符转换成数字
pow *= 10;
--p;
}
if (isMinus) res *= -1;
if (res > INT_MAX) return INT_MAX;//当结果大于了INT变量的最大值时,返回这个最大值
if (res < INT_MIN) return INT_MIN;//当结果小于了INT变量的最小值时,返回这个最小值

return static_cast <int> (res);
}
------解决方案--------------------
一个数字转换而已,能用就行了,管什么高效不高效的。

------解决方案--------------------
极度建议用atoi
------解决方案--------------------
用atoi。你自己写的代码几乎很难和库函数相比的。