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;
}