[英]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中唯一這樣的類型是char
和unsigned 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.