You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将表示十六进制值的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:27:02