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

如何将十六进制字符串转换为存储十六进制字节的unsigned char数组

C++ 十六进制字符串转字节数组实现方案

核心逻辑

十六进制字符串每2个字符对应1个字节,逐2位读取字符转换为对应数值后拼接为单字节即可。

完整实现代码

#include <iostream>
#include <string>
#include <vector>
#include <stdexcept>
#include <cstdint>
#include <cstdio>

// 单个十六进制字符转对应数值
uint8_t hexCharToValue(char c) {
    if (c >= '0' && c <= '9') return c - '0';
    if (c >= 'a' && c <= 'f') return 10 + c - 'a';
    if (c >= 'A' && c <= 'F') return 10 + c - 'A';
    throw std::invalid_argument("存在非十六进制字符");
}

// 转换入口:输入十六进制字符串,返回动态字节数组
std::vector<uint8_t> hexStrToByteArray(const std::string& hexStr) {
    if (hexStr.length() % 2 != 0) {
        throw std::invalid_argument("十六进制字符串长度不能为奇数");
    }
    std::vector<uint8_t> byteArray;
    byteArray.reserve(hexStr.length() / 2);
    for (size_t i = 0; i < hexStr.length(); i += 2) {
        uint8_t highBit = hexCharToValue(hexStr[i]);
        uint8_t lowBit = hexCharToValue(hexStr[i + 1]);
        byteArray.push_back((highBit << 4) | lowBit);
    }
    return byteArray;
}

// 使用示例
int main() {
    std::string hexStr = "fc4883e4f0e8";
    try {
        std::vector<uint8_t> myHexArray = hexStrToByteArray(hexStr);
        // 输出验证转换结果
        std::cout << "转换后数组:{ ";
        for (size_t i = 0; i < myHexArray.size(); ++i) {
            if (i != 0) std::cout << ", ";
            printf("0x%02x", myHexArray[i]);
        }
        std::cout << " }" << std::endl;

        // 如需裸unsigned char指针直接调用data()即可,用法和静态数组完全一致
        unsigned char* rawArray = myHexArray.data();
        size_t arrayLength = myHexArray.size();
    } catch (const std::exception& e) {
        std::cerr << "转换失败: " << e.what() << std::endl;
        return 1;
    }
    return 0;
}

说明

  • std::vector<uint8_t>是C++标准库的动态数组,内存连续且自动管理生命周期,和C#中List<byte>用法高度相似
  • 代码兼容C++11及以上所有版本,主流GCC、Clang、MSVC编译器都可直接编译运行
  • 如果需要编译期静态数组,可提前通过脚本把十六进制字符串转换为静态数组初始化语法,运行期动态构造场景使用上述方案即可

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:03