首页 > 解决方案 > C ++如何将char数组转换为字节向量(向量)

问题描述

我有大量的字符

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>

标签: c++arraysvectortype-conversion

解决方案


您可以将 的数组检查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是例如 a std::vector<char>,那么std::begin/end将返回一个迭代器(它可能是也可能不是本机指针)。在这种情况下,您将需要使用myCharVector.data()myCharVector.data() + myCharVector.size()获取指向数组开头和结尾的指针。


推荐阅读