0%

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

文章时效性提示

本文发布于 471 天前,部分信息可能已经改变,请注意甄别。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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码表中各字符是按照一定顺序排列的。