C++如何将字符数组转换为字节向量(向量<byte>)
C++ how to convert char array to vector of bytes (vector<byte>)
我有大量的字符数组
char myCharArray[] = {
0x9B,0x3E,0x34,0x87,0xFD,0x24,0xB4,0x64,0xBA,0x80,0x04,0xFD,
0xDF,0x23,0x41,0xEE,0x00,0x00,0x00,0x00,0xAC,0xF9,0x8F,0x00,
...
}
如何将myCharArray转换为vector<byte>
您可以将char
数组作为std::byte
数组进行检查。因此,最有效的解决方案是:
#include <iterator> // for std::begin / end
std::vector<std::byte> v(
reinterpret_cast<std::byte*>(std::begin(myCharArray)),
reinterpret_cast<std::byte*>(std::end(myCharArray))
);
这样,向量预先知道要分配多少内存,并且它可以通过memcpy或类似的高效例程执行复制,而不是一个字节一个字节地复制,并且必须在两者之间多次重新分配。
编辑:
请注意,此代码仅有效,因为本机数组上的std::begin
返回类型保证为指针。如果myCharArray
例如是一个std::vector<char>
,那么std::begin/end
将返回一个迭代器(可能是也可能不是本机指针(。在这种情况下,例如,您需要使用myCharVector.data()
和myCharVector.data() + myCharVector.size()
来获取指向数组开头和结尾的指针。
std::vector<std::byte> bytes;
for (char &c : myCharArray) {
bytes.push_back(static_cast<std::byte>(c));
}
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 呼叫运营商<<临时
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- 如何过载<<用于YAML::Emitter的运算符,以序列化包含另一个自定义类的向量的自定义类