C语言中,将十六进制字符串(char*)转换为整数(int)有几种方法。对于大多数情况,strtol 是最佳选择,因为它可靠且易于使用。手动转换可能适用于需要特殊处理或优化的情况,但通常没有必要。

1、使用 strtol() 转换十六进制字符串为整数

strtol() 函数(string to long)是一个非常强大且常用的字符串转数值函数,属于 标准库。它的典型使用场景主要集中在 字符串转数字。处理十六进制字符串转整数首选 strtol(),简单安全,支持带 0x

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *hex_str = "1A3F";
    int number = (int)strtol(hex_str, NULL, 16);
    printf("Hex string: %s\nDecimal: %d\n", hex_str, number);
    return 0;
}

支持带 0x 前缀的十六进制字符串

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *hex_str = "0x1A3F";
    // strtol 会自动识别 0x 开头的十六进制
    int number = (int)strtol(hex_str, NULL, 0);  // base = 0 自动识别进制

    printf("Hex string: %s\n", hex_str);
    printf("Decimal value: %d\n", number);  // 输出 6719

    return 0;
}

2、转换单个字符为十六进制值(如 'A' -> 10)

将单个字符转换为其对应的十六进制值,需要考虑到字符可能是数字('0''9')或字母('A''F',或'a''f')的情况。

#include <stdio.h>
#include <ctype.h>

int char_to_hex(char c) {
    if (c >= '0' && c <= '9') {
        return c - '0';
    } else if (c >= 'A' && c <= 'F') {
        return c - 'A' + 10;
    } else if (c >= 'a' && c <= 'f') {
        return c - 'a' + 10;
    } else {
        return -1; // 无效字符
    }
}

int main() {
    char test_chars[] = {'0', '9', 'A', 'F', 'a', 'f', 'G'};
    int hex_values[7];
    int i;

    for(i=0; i<7; i++){
        hex_values[i] = char_to_hex(test_chars[i]);
    }

    for (int i = 0; i < 7; i++) {
        printf("Character: %c, Hex Value: %d\n", test_chars[i], hex_values[i]);
    }

    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表