将数据从POD向量复制到字节向量(干净地)

时间:2015-05-15 21:25:18

标签: c++ vector

假设我有一个浮点数向量,我希望"序列化",因缺少一个更好的术语,转换为字节向量,即

std::vector<float> myFloats = {1.0, 2.0, 3.0, 4.0};
std::vector<unsigned char> myBytes;

现在,我memcpy浮动到uint32_t变量,并且做位移位和屏蔽以一次插入一个字节到myBytes

由于这两者中的记忆是连续的,有没有办法让我更干净地做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以在不违反严格别名的情况下使用unsigned char *别名为其他类型,因此以下内容可以使用

std::vector<float> myFloats = {1.0, 2.0, 3.0, 4.0};
std::vector<unsigned char> myBytes{reinterpret_cast<unsigned char *>(myFloats.data()),
                                   reinterpret_cast<unsigned char *>(myFloats.data() + myFloats.size())};

您正在使用带有两个迭代器的vector constructor

template< class InputIt >
vector( InputIt first, InputIt last,
        const Allocator& alloc = Allocator() );

答案 1 :(得分:1)

您可以这样做:

std::vector<unsigned char>
getByteVector(const std::vector<float>& floats)
{
  std::vector<unsigned char> bytes(floats.size() * sizeof(float));
  std::memcpy(&bytes[0], &floats[0], bytes.size());

  return bytes;
}