int APICOM_htoi(char *src)
{
char *dst = src;
char *calc = src;
int total = 0;
int length = 0;
if(src ==PNULL)
{
return PNULL;
}
while(*dst++)
{
length++;
}
/*处理0X开始*/
if((*src == 0) && ((*(src+1) == 'x') || (*(src+1) == 'X')))
{
length -= 2;
calc += 2;
while(length--)
{
if(*calc >= 'A' && *calc <= 'F')
{
total += ((*calc - 55) * APICOM_power(16, length)); //*calc会将字符转为ascii码
calc++;
}
else if(*calc >= 'a' && *calc <= 'f')
{
total += ((*calc - 87) * APICOM_power(16, length));
calc++;
}
else if(*calc >= '0' && *calc <= '9')
{
total += ((*calc - 48) * APICOM_power(16, length));
calc++;
}
else
{
return -1;
}
}
}
/*处理其他情况*/
else
{
while(length--)
{
if(*calc >= 'A' && *calc <= 'F')
{
total += ((*calc - 55) * APICOM_power(16, length));
calc++;
}
else if(*calc >= 'a' && *calc <= 'f')
{
total += ((*calc - 87) * APICOM_power(16, length));
calc++;
}
else if(*calc >= '0' && *calc <= '9')
{
total += ((*calc - 48) * APICOM_power(16, length));
calc++;
}
else
{
return -1;
}
}
}
return total;
}
int APICOM_power(int x, int y)
{
int multi = 1;
if(x == 0)
{
return 0;
}
if(y == 0)
{
return 1;
}
for( ; y > 0; y--)
{
multi *= x;
}
return multi;
}