如何将表示十六进制值的char数组转换为u64类型变量
十六进制字符串转u64实现方案
核心逻辑
16个字符的十六进制串刚好对应64位无符号整数,每个字符对应4位存储空间,你需要的每次左移4位操作直接用移位运算符<< 4即可实现,每次处理新字符前左移4位腾出低4位空间,写入新字符对应的数值即可。
完整实现代码
#include <stdio.h> #include <stdint.h> // 如果你项目里的u64是自定义别名,可加下行适配 // typedef uint64_t u64; uint64_t hex_str_to_u64(const char *key) { uint64_t res = 0; // 固定处理16个十六进制字符,刚好凑满64位 for (int i = 0; i < 16; i++) { char c = key[i]; uint8_t val; // 单个十六进制字符转对应数值 if (c >= '0' && c <= '9') { val = c - '0'; } else if (c >= 'a' && c <= 'f') { val = 10 + c - 'a'; } else if (c >= 'A' && c <= 'F') { val = 10 + c - 'A'; } else { // 非法字符场景可自行补充异常处理逻辑,这里默认返回0 return 0; } // 核心拼接逻辑:左移4位腾出空间,或运算写入新值 res = (res << 4) | val; } return res; } // 测试用例 int main() { // 原示例值为15位,补了1位f凑满16位,实际使用替换为你的输入即可 const char *test_key = "a35f64d2e1b5f5ff"; uint64_t stored_val = hex_str_to_u64(test_key); printf("转换后u64值:0x%lx\n", stored_val); return 0; }
注意事项
- 输入必须保证为16位合法十六进制字符(大小写均可),否则会出现结果异常;如果输入带
0x前缀,需要先跳过前2个字符再处理 - 如果输入长度不足16位,可根据业务需求选择补前导零或者后补零后再进行转换
内容的提问来源于stack exchange,提问作者Alan Andrade
相关产品推荐
相关产品推荐

