C++如何将十六进制字符串按原值追加到字节数组中?
C++ 十六进制字符串转字节追加方案
完全可以实现,核心逻辑是将十六进制字符串解析为对应数值,再转换为无符号字符类型存入字节容器即可,以下是可直接运行的实现:
基础实现(适配带0x前缀的单字节十六进制串)
适配你示例中的需求场景:
#include <string> #include <vector> #include <stdexcept> #include <cstdint> uint8_t hex_to_byte(const std::string& hex_str) { // 第3参数设为16自动识别0x/0X前缀,按十六进制规则解析 unsigned long num = std::stoul(hex_str, nullptr, 16); // 校验单字节范围,避免溢出 if (num > 0xFF) { throw std::out_of_range("输入十六进制值超出单字节可表示范围[0x00, 0xFF]"); } return static_cast<uint8_t>(num); } int main() { std::string hexString = "0x30"; std::vector<uint8_t> byte_vec; // 追加到字节vector中 byte_vec.push_back(hex_to_byte(hexString)); // 此时byte_vec[0]的值就是0x30,和你示例中example数组的元素完全一致 return 0; }
注意事项
- 如果需要兼容C++11之前的标准,可以把
std::stoul替换为C标准库的strtoul:unsigned long num = strtoul(hex_str.c_str(), nullptr, 16); - 如果需要处理无
0x前缀的连续十六进制串(比如"303132"需要转成0x30、0x31、0x32三个字节),可以每两个字符拆分一次,再调用上述转换逻辑即可。
内容的提问来源于stack exchange,提问作者cesqueax
相关产品推荐
相关产品推荐

