我有一个大的字符数组
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 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));
}
char myCharArray[]
文字面意思替换为std::vector<byte> myCharArray
(或其他名称),问题就解决了——如果您所说的“转换”是指更改变量类型的话。 - Slavastd::vector<char> v(std::begin(myCharArray), std::end(myCharArray));
,它会自行复制内容。 - Useless