编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值, 字符串中包含的字符可以是0 - 9,A - F,a - f
// 把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值,字符串中包含的字符可以是0-9,A-F,a-f
int htoi(const char *s) {
int dec = 0, len, i, n = 0, j = 0, ji, k;
len = strlen(s);
int b = 0; // 十六进制数字在字符串中的起始位置
if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) {
b = 2;
}
for(i = len - 1; i >= b; i--){
//处理不同字符串
if(s[i] >= '0' && s[i] <= '9'){
n = s[i] - '0';
}else if(s[i] >= 'a' && s[i] <= 'f'){
n = s[i] - 'a' + 10;
}else if(s[i] >= 'A' && s[i] <= 'F'){
n = s[i] - 'A' + 10;
}
ji = 1;
if(j == 0){
ji = 1;
}else{
k = j;
while(k > 0){
ji = ji * 16;
k--;
}
}
j++;
dec = dec + ji * n;
}
return dec;
}