string hexstr = "0011223300aabbccAABBCC00";
char chexstr[]= "0011223300aabbccAABBCC00";
const char* phexstr = "0011223300aabbccAABBCC00";
unsigned char hexchar[] = { 0x00,0x11,0x22,0x33,0x00,0xAA,0xBB,0xCC,0xAA,0xBB,0xCC,0x00 };
//怎么把上面未知长度的16进制字符串转换成unsigned char hexchar[]
c++ 如何完成以下转换
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 这个有多个方法可以解:
方法一:
从C ++ 17开始,还有std :: from_chars。以下函数采用十六进制字符的字符串并返回T的向量:#include <charconv> template<typename T> std::vector<T> hexstr_to_vec(const std::string& str, unsigned char chars_per_num = 2) { std::vector<T> out(str.size() / chars_per_num, 0); T value; for (int i = 0; i < str.size() / chars_per_num; i++) { std::from_chars<T>( str.data() + (i * chars_per_num), str.data() + (i * chars_per_num) + chars_per_num, value, 16 ); out[i] = value; } return out; }
当然,给出的示例是使用的c++17的charconv
C++17提供了一组高性能,不抛出,不依赖本地环境的转换函数。在高吞吐量的环境下有良好的表现。
std::from_chars```c++ #include <charconv> struct from_chars_result { const char *ptr; std::errc ec; }; enum class chars_format { scientific = /*unspecified*/, fixed = /*unspecified*/, hex = /*unspecified*/, general = fixed | scientific }; std::from_chars_result from_chars(const char *frist, const char *last, /* integer */ &value, int base = 10);//c++17 std::from_chars_result from_chars(const char *frist, const char *last, /* floating */ &value, std::char_format fmt = std::chars_format::general); //c++17
或者,使用c代码也能解:
// 把十六进制字符串,转为字节码,每两个十六进制字符作为一个字节 unsigned char* HexToByte(const char* szHex) { if (!szHex) return NULL; int iLen = strlen(szHex); if (iLen <= 0 || 0 != iLen % 2) return NULL; unsigned char* pbBuf = new unsigned char[iLen / 2]; // 数据缓冲区 int tmp1, tmp2; for (int i = 0; i < iLen / 2; i++) { tmp1 = (int)szHex[i * 2] - (((int)szHex[i * 2] >= 'A') ? 'A' - 10 : '0'); if (tmp1 >= 16) return NULL; tmp2 = (int)szHex[i * 2 + 1] - (((int)szHex[i * 2 + 1] >= 'A') ? 'A' - 10 : '0'); if (tmp2 >= 16) return NULL; pbBuf[i] = (tmp1 * 16 + tmp2); } return pbBuf; }
```
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来