第一种方法: 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; } 最后一个方法 是通过 建立一个表,直接将十六进制字符作为索引来得到值。