簡體   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