首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11/14将std::uint32 32转换为std::vector<std::uint8>

C++11/14将std::uint32 32转换为std::vector<std::uint8>
EN

Stack Overflow用户
提问于 2016-07-04 21:01:56
回答 2查看 5.3K关注 0票数 1

我想以比这更好的方式将std::uint32转换为std::vector<std::uint8>

代码语言:javascript
复制
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)); 

我在找这样的东西:

代码语言:javascript
复制
std::vector<std::uint8_t> vraw_data((std::uint8_t*)&base_rva, sizeof(base_rva));

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-04 21:15:28

我在找这样的东西: std::vector raw_data((std::uint8_t*)&base_rva,sizeof(base_rva));

std::vector没有这样的构造函数,但是假设您想要将std::uint32_t内部表示的副本存储在std::vector<std::uint8_t>中,您可以简单地这样做

代码语言:javascript
复制
 std::uint32_t data = 42;
 std::vector<std::uint8_t> raw_data( (std::uint8_t*)&data
                                   , (std::uint8_t*)&(data) + sizeof(std::uint32_t));

(4)来自 constructors

票数 4
EN

Stack Overflow用户

发布于 2016-07-04 23:56:04

如果你不喜欢演员,你可以像.

代码语言:javascript
复制
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); }
};

把它当作..。

代码语言:javascript
复制
auto vec = to_byte_vector(42).get_vector();

但实际上,这只是让union为你做演员的工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38192181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档