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

C++如何将vector<string>内的十六进制字符串内容转换为对应char数组

解决方法

核心逻辑是对每个十六进制格式的字符串做数值解析,而非直接提取string对象的字符内存,实现代码如下:

完整实现示例

#include <vector>
#include <string>
#include <cstdlib>
#include <cstring>

int main() {
    // 你的原始输入
    std::vector<std::string> vectorStr = { "0x6c", "0x9f", "0x71" };
    std::vector<char> charVec;
    charVec.reserve(vectorStr.size());

    for (const auto& hexStr : vectorStr) {
        char* parseEnd = nullptr;
        // 第三个参数16指定按十六进制解析,自动识别0x前缀
        unsigned long hexVal = strtoul(hexStr.c_str(), &parseEnd, 16);
        // 可选:加入解析错误校验
        if (parseEnd == hexStr.c_str() + hexStr.size()) {
            charVec.push_back(static_cast<char>(hexVal));
        } else {
            // 解析失败时的自定义处理,比如填入默认值
            charVec.push_back('\0');
        }
    }

    // 若需要原生C风格char数组,可通过以下两种方式获取:
    // 方式1:直接使用vector的底层数组,生命周期和charVec绑定,无需手动释放
    char* charArray = charVec.data();
    size_t arrayLength = charVec.size();

    // 方式2:申请独立的动态数组,自行管理生命周期,使用完需执行 delete[] dynArray
    char* dynArray = new char[charVec.size()];
    memcpy(dynArray, charVec.data(), charVec.size() * sizeof(char));

    // 你的后续逻辑
    return 0;
}

补充说明

  • 若你的输入字符串不带0x前缀,strtoul传第三个参数16依然可以正常解析
  • 如果使用C++11及以上版本,也可以用std::stoi(hexStr, nullptr, 16)替换strtoul逻辑,注意输入的十六进制值不要超过int的取值范围即可
  • 该方案和网上常见的「string转char数组」方案本质区别是:前者是解析字符串的语义为对应数值,后者是直接拷贝string存储的字符内存,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:21:04