您的位置:

C字符串转16进制数字详解

在C语言中,字符串是一种很重要的数据类型,常常需要把字符串转成数字进行处理。在一些特殊的应用场景中,需要把数字转换成16进制的形式。本文将从多个方面对C字符串转16进制数字做详细的阐述。

一、使用strtoul函数转16进制数字

unsigned long int strtoul(const char *str, char **endptr, int base);

strtoul函数是C标准库中的函数,用于将字符串转换成无符号长整型数字。其中,base参数指定字符串的进制。当base参数为0时,函数会自动判断字符串的进制,若为0x或0X开头则将其解释为16进制。

通过这个函数可以实现字符串到16进制数字的转换。使用代码如下:

#include
#include
   

int main()
{
    char str[] = "FFFF";
    char *endptr;
    unsigned long int num = strtoul(str, &endptr, 16);
    printf("16进制字符串:%s\n16进制数字:%lu\n", str, num);
    return 0;
}

   
  

输出结果:

16进制字符串:FFFF
16进制数字:65535

可以看到,将字符串"FFFF"转换成16进制数字65535成功。

二、使用sscanf函数转16进制数字

int sscanf(const char *str, const char *format, ...);

sscanf函数也是C标准库中的函数,用于从字符串中提取指定格式的数据。与printf格式化输出一样,sscanf函数可以指定以16进制形式读取数据。通过这个函数也可以实现字符串到16进制数字的转换。使用代码如下:

#include

int main()
{
    char str[] = "ABCDEF";
    unsigned long int num;
    sscanf(str, "%lx", &num);
    printf("16进制字符串:%s\n16进制数字:%lu\n", str, num);
    return 0;
}

  

输出结果:

16进制字符串:ABCDEF
16进制数字:11259375

可以看到,将字符串"ABCDEF"转换成16进制数字11259375成功。

三、使用atoi函数转10进制数字再转16进制数字

int atoi(const char *nptr);

atoi函数也是C标准库中的函数,用于将字符串转换成整型数字。可以利用这个函数将16进制字符串转换成10进制数字,再将10进制数字转换成16进制数字。使用代码如下:

#include

int main()
{
    char str[] = "1234";
    int num = atoi(str);
    printf("10进制数字:%d\n", num);
    printf("16进制数字:%X\n", num);
    return 0;
}

  

输出结果:

10进制数字:1234
16进制数字:4D2

可以看到,将字符串"1234"转换成16进制数字4D2成功。

四、使用自定义转换函数转16进制数字

如果没有C标准库中的转换函数,也可以自定义一个将字符串转换成16进制数字的函数。可以通过循环每个字符并将其转换成数字,再将这些数字转换成16进制数,最终得到16进制数字。使用代码如下:

#include

unsigned int strToHex(char *str)
{
    unsigned int num = 0;
    while(*str) {
        int tmp = 0;
        if(*str >= '0' && *str <= '9') {    // 数字字符
            tmp = *str - '0';
        } else if(*str >= 'a' && *str <= 'f') {    // 小写字母字符
            tmp = *str - 'a' + 10;
        } else if(*str >= 'A' && *str <= 'F') {    // 大写字母字符
            tmp = *str - 'A' + 10;
        }
        num = num * 16 + tmp;
        str++;
    }
    return num;
}

int main()
{
    char str[] = "1A2B3C";
    unsigned int num = strToHex(str);
    printf("16进制字符串:%s\n16进制数字:%X\n", str, num);
    return 0;
}

  

输出结果:

16进制字符串:1A2B3C
16进制数字:1A2B3C

可以看到,使用自定义函数将字符串"1A2B3C"转换成16进制数字1A2B3C成功。

五、总结

本文从使用C标准库函数、自定义函数等多个方面对C字符串转16进制数字做了详细的阐述。不同的转换方式适用于不同的应用场景,可以根据实际需要选择合适的转换方式。