我想以更好的方式将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));
有什么建议吗?
答案 0 :(得分:1)
我正在寻找类似的东西:
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
constructors的(4)。
答案 1 :(得分:0)
如果你不喜欢施法,你可以这样做......
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
让你的演员工作。