C++如何将字符数组转换为字节向量(向量<byte>)

C++ how to convert char array to vector of bytes (vector<byte>)

本文关键字:向量 lt byte gt 字节 字符 数组 转换 C++      更新时间:2023-10-16

我有大量的字符数组

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));
}