在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>

Posted

技术标签:

【中文标题】在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>【英文标题】:Cast/Convert const vector<uint8_t> to const vector<char> in c++ 【发布时间】:2020-06-03 21:10:24 【问题描述】:

在 c++ 中将const vector&lt;uint8_t&gt; 转换/转换为const vector&lt;char&gt; 的最高效方法是什么?

【问题讨论】:

虽然绝对不符合标准,但如果 uint8_ttypedefed 到 unsigned char(通常是这样),您可能可以使用普通的旧 C 风格演员表摆脱困境 绝对不符合标准 ;-) 请注意,如果可以解决问题,您可以为内容设置别名 @M.M 您能否提供一个将向量 别名化为 const vector 的示例? @Tito 你可以给内容取别名,而不是向量。例如。 const char *p = (const char *)&amp;v[0]; 【参考方案1】:

这应该可以工作(未经测试的代码):

std::vector<uint8_t> v1 = // something;
const char *p = (const char *) v1.data();
std::vector<char> v2(p, p + v1.size());

现在你有两个向量; uint8_ts 之一和chars 之一

一次内存分配,一次调用memcpy

[后来:@Tito指出vector没有(指针,大小)构造函数(如string/span/string_view)重写示例代码以使用(迭代器,迭代器)构造函数而是]

【讨论】:

Marschall 没有用于此类初始化的匹配构造函数。你确定这是正确的吗?

以上是关于在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将输入正确读入 2D 向量 vector<vector<int>>

在 C++ 中将 vector<Rect> OpenCV 转换为 vector<vector<float>>

从 MATLAB 生成代码后,在 C++ 中将 vector<> 转换为 emxArray_real_T

在 C++ 中将非 const 转换为 const

如何使用 <numpy/arrayobject.h> 在 c++ 中将数据从 np.array 获取到 std::vector?

在现代 C++ 中将 std::array<std::array<T,N>> 转换为 std::vector<T>