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
相关产品推荐
相关产品推荐

