C++-将数据从浮点向量复制到uint8向量

C++ - copy data from float vectors to uint8 vector?

本文关键字:向量 复制 uint8 数据 C++-      更新时间:2023-10-16

我有几个浮点向量,我想将它们的字节复制到一个字节向量中。实现这一目标的最佳方法是什么?对每个浮点向量进行迭代,将浮点转换为字节和buffer上的push_back()似乎是一种效率低下的方法。

void CopyToByteVector(Vector<uint8_t>& buffer)
{
Vector<float> vec1 = //....
Vector<float> vec2 = //....
// best way to copy byte values of vec1, vec2 into buffer?
}

就标准而言,我不认为这能保证工作。我认为没有一种方法可以做到你所要求的不是未定义的行为。话虽如此,我几乎可以肯定,在几乎所有情况下(可能在你关心的所有情况下),它都会起作用。

uint8_t * ibegin = reinterpret_cast<uint8_t*>(&vec1[0]);
auto size = vec1.size() * (sizeof(float)/sizeof(uint8_t));
buffer.assign(ibegin, ibegin + size);
// Not sure what you wanted to do with vec2. Append it?
ibegin = reinterpret_cast<uint8_t*>(&vec2[0]);
size = vec2.size() * (sizeof(float)/sizeof(uint8_t));
buffer.insert(buffer.end(), ibegin, ibegin + size);

std::vector有一个构造函数,它接受一对迭代器并将其复制到向量中,您应该从这一点开始。

也不清楚您所说的"将浮点转换为字节"是什么意思。这仅仅是一种贬低吗?你的代码表明你的意图正好相反,是向上浮动。