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

发布时间 2023-07-22 19:52:51作者: 语巫

Archlinux

GCC 13.1.1  20230429

2023-07-22 19:48:23 星期六

 


点击查看代码
#include<stdio.h>
#include<ctype.h>

int htoi( const char *s );

int main()
{
    char arr[4] = "0x3A";
    int result = htoi(arr);

    printf("%d\n", result);



    return 0;
}



int htoi( const char *s )
{
    int i, out;

    i = out = 0;

    //处理前缀
    if( s[0] == '0' && ( s[1] == 'x' || s[1] == 'X') )
        i = 2;

    //处理字符串
    while( s[i] != '\0' )
    {
        int tmp = 0;
        char c_tmp = s[i];

        if( isdigit(c_tmp) ){
            tmp = c_tmp - '0';
        }
        else if( c_tmp >= 'A' && c_tmp <= 'F' ){
            tmp = c_tmp - 'A' + 10;
        }
        else{
            puts("字符非法!");
        }

        out = out * 16 + tmp;
        ++i;
    }

    return out;
}

 


运行截图:

image

0x3A的十进制数是58,输出正确。

 


小白刚学习C语言,代码质量不高,欢迎评论。