簡體   English   中英

C++11/14 將 std::uint32 轉換為 std::vector<std::uint8>

[英]C++11/14 convert std::uint32 to std::vector<std::uint8>

我想以比這更好的方式將std::uint32轉換為std::vector<std::uint8>

std::uint32_t base_rva = 0xccddee00;
std::vector<std::uint8_t> vraw_data;

//copying base_rva to raw_data
vraw_data.resize(sizeof(base_rva));
std::memcpy(vraw_data.data(), &base_rva, sizeof(base_rva)); 

我正在尋找類似的東西:

std::vector<std::uint8_t> vraw_data((std::uint8_t*)&base_rva, sizeof(base_rva));

有什么建議嗎?

我正在尋找類似的東西:

 std::vector<std::uint8_t> raw_data((std::uint8_t*)&base_rva, sizeof(base_rva));

std::vector沒有這樣的構造函數,但是假設您想將std::uint32_t內部表示的副本存儲在std::vector<std::uint8_t>您可以簡單地做

 std::uint32_t data = 42;
 std::vector<std::uint8_t> raw_data( (std::uint8_t*)&data
                                   , (std::uint8_t*)&(data) + sizeof(std::uint32_t));

根據來自std::vector構造函數的(4)。

如果你不喜歡鑄造,你可以像......

union to_byte_vector
{
  uint32_t val;
  uint8_t bytes[1];

  to_byte_vector() = default;
  to_byte_vector(uint32_t v) : val(v) {}
  to_byte_vector(const to_byte_vector& o) : val(o.val) {}
  to_byte_vector& operator=(const to_byte_vector& o) { val = o.val; return *this; }
  operator uint32_t() const { return val; }
  std::vector<uint8_t> get_vector() const { return std::vector<uint8_t>(begin(), end()); }

private:
  const uint8_t* begin() const { return bytes; }
  const uint8_t* end() const { return bytes + sizeof(uint32_t); }
};

並使用它就像...

auto vec = to_byte_vector(42).get_vector();

但實際上,這只是讓union為你做選角工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM