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