第一种方法:
- int hex_char_value(char c)
- {
- if(c >= '0' && c <= '9')
- return c - '0';
- else if(c >= 'a' && c <= 'f')
- return (c - 'a' + 10);
- else if(c >= 'A' && c <= 'F')
- return (c - 'A' + 10);
- assert(0);
- return 0;
- }
- int hex_to_decimal(const char* szHex, int len)
- {
- int result = 0;
- for(int i = 0; i < len; i++)
- {
- result += (int)pow((float)16, (int)len-i-1) * hex_char_value(szHex[i]);
- }
- return result;
- }
第二种方法:
int x;
sscanf("abc", "%x", x);
第三种方法:
- static int hex_table[]={0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,1,2,3,4,5,6,
- 7,8,9,0,0,0,0,0,0,
- 0,10,11,12,13,14,15,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,10,
- 11,12,13,14,15};
- int hex_to_decimal(char* hex_str)
- {
- char ch;
- int iret=0;
- while(ch=*hex_str++)
- {
- iret=(iret<<4)|hex_table[ch];
- }
- return iret;
- }
最后一个方法 是通过 建立一个表,直接将十六进制字符作为索引来得到值。