编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:09、af、A~F。
代码:
1234567891011121314151617181920212223242526272829303132333435363738394041 | int hosi(char input[]){ int i = 0; int j = 0; int x = 0; int a = 0, b = 0, c = 0; static int sum = 0; for (i=0; input[i+1]!='\0'; i++) { ;//计算出输入的十六进制数的位数 } for (j=i; j>=2; j--) { if (input[j] >='0' && input[j] <='9') { a = input[j] - '0'; } if (input[j] >='a' && input[j] <='f') { a = input[j] - 'a' + 10; } if (input[j] >='A' && input[j] <='F') { a = input[j] - 'A' + 10; } for (x = 0; x<=c ;x++) { b = a * pow(16,x); } c++; sum = sum + b; } return sum;}int main(){ char input[20] = {0}; scanf("%s",&input); int ret = hosi(input); printf("%d\n",ret); return 0;} |
上面的代码中,对输入的十六进制数字的每一位分三种情况处理:
- 这一位是0-9:直接用这个字符减去’0’;
- 这一位是a-f:用这一位减去字符’a’再加10;
- 这一位是A-F:用这一位数字减去’A’再加10。
用上面的方式处理,是由于ASCII码表中各字符是按照一定顺序排列的。