稍加处理就可以支持负数。字符串必须以'0x'打头,表示是一个16进制字符串
__int64 ahextoi64(const char *str)
{
char szFlag[3]={0};
strncpy(szFlag,str,2);
if (strcmp(szFlag,"0x"))
return 0;
int len = strlen(str+2);
char szNum[16];
strcpy(szNum,str+2);
__int64 ret = 0;
__int64 c = 0;
int i = 0;
while(len)
{
switch(szNum[len-1])
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
c = szNum[len-1] -'0';
c = c<<(i * 4);
ret |=c;
break;
case 'a':
case 'A':
c = 10;
c = c<<(i * 4);
ret |=c;
break;
case 'b':
case 'B':
c = 11;
c = c<<(i * 4);
ret |=c;
break;
case 'c':
case 'C':
c = 12;
c = c<<(i * 4);
ret |=c;
break;
case 'd':
case 'D':
c = 13;
c = c<<(i * 4);
ret |=c;
break;
case 'e':
case 'E':
c = 14;
c = c<<(i * 4);
ret |=c;
break;
case 'f':
case 'F':
c = 15;
c = c<<(i * 4);
ret |=c;
break;
default:
return 0;
}
len--;
i++;
}
return ret;
}