int atoi(const char* src)
{
assert(NULL != src);
int sign = 0;
double type = 10.0;
int len = 0;
unsigned int temp = 0;
for(; isspace(*src);src++)
{
;
}
'-' == *src ? sign = -1 : sign = 1;
if('-' == *src || '+' == *src)
{
src++;
}
if('0' == *src)
{
src++;
if('x' == *src)
{
type = 16.0;
src++;
}
else
{
type = 8.0;
}
}
while(*src)
{
if(8.0 == type)
{
if(*src < '0' || *src > '7')
{
return 0;
}
}
else if(16.0 == type)
{
if(*src < '0' || *src > '9')
{
if(!(*src == 'A' || *src == 'B' || *src == 'C' || *src == 'D' || *src == 'E' ))
{
return 0;
}
}
}
else
{
if(*src < '0' || *src > '9')
{
return 0;
}
}
len++;
src++;
}
if(len > 10)
{
return 0;
}
int i = 0;
for(src--, i=0; i<len; i++,src--)
{
temp +=(*src-'0') * pow(type, i);
}
if(temp > 65536 * 65536/2 -1)
{
return 0;
}
return sign * temp;
}