繁体   English   中英

用原始数据填充std :: vector

[英]Filling an std::vector with raw data

我需要用原始数据填充向量,有时是2个字节,有时是8个...我最终得到了这个模板功能:

template <typename T>
void fillVector(std::vector<uint8_t>& dest, T t)
{
    auto ptr = reinterpret_cast<uint8_t*>(&t);
    dest.insert(dest.end(),ptr,ptr+sizeof(t));
}

这样,我可以像这样填充向量:

fillVector<uint32_t>(dst,32bitdata);
fillVector<uint16_t>(dst,16bitdata);

我想知道标准库中是否已经存在类似的东西?

不,标准库中没有任何东西可以满足您的需求。 因此,您的解决方案几乎就是您当前可以使用的解决方案(假设您的目标是进行某种形式的序列化)。

唯一的改进是,您假设uint8_t是可用于别名对象和检查其字节的类型。 不必如此。 C ++ 11中唯一这样的类型是charunsigned char 尽管uint8_t通常在大多数现代体系结构中都使用别名,但这并不是一个硬性要求,但是它可以别名特定于平台的8位无符号整数类型(其优点不在此问题范围之内)。 因此,要符合标准,请注意以下几点:

static_assert(std::is_same<unsigned char, std::uint8_t>::value, "Oops!");

或使用自己的别名作为有效的“字节”类型

namespace myapp { using byte = unsigned char; }

并处理std::vector<myapp::byte>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM