十六进制数字组成的字符串转换为整型十进制

编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:09、af、A~F。
代码:

1234567891011121314151617181920212223242526272829303132333435363738394041
#include <stdio.h>#include <math.h>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;}

上面的代码中,对输入的十六进制数字的每一位分三种情况处理:

  1. 这一位是0-9:直接用这个字符减去’0’;
  2. 这一位是a-f:用这一位减去字符’a’再加10;
  3. 这一位是A-F:用这一位数字减去’A’再加10。
    用上面的方式处理,是由于ASCII码表中各字符是按照一定顺序排列的。
🔍 ×