对于plain old data结构(如图所示),这是很简单的: 您知道结构的大小(以字节为单位)(通过sizeof运算符)。 这意味着您可以创建一个该大小的字节向量。 一旦有了这个向量,就可以将结构对象的字节复制到向量中。 现在,您实际上拥有了结构对象的字节数组表示形式。 在代码中,它将是这样的:
struct my_struct_type
{
int enable;
char name;
int numbers[5];
float counter;
};
my_struct_type my_struct_object = {
// TODO: Some valid initialization here...
};
// Depending on the compiler you're using, and its C++ standard used
// you might need to use `std::uint8_t` instead of `std::byte`
std::vector<std::byte> bytes(sizeof my_struct_object);
std::memcpy(bytes.data(), reinterpret_cast<void*>(&my_struct_object), sizeof my_struct_object);
2条答案
按热度按时间zour9fqk1#
对于plain old data结构(如图所示),这是很简单的:
您知道结构的大小(以字节为单位)(通过
sizeof
运算符)。这意味着您可以创建一个该大小的字节向量。
一旦有了这个向量,就可以将结构对象的字节复制到向量中。
现在,您实际上拥有了结构对象的字节数组表示形式。
在代码中,它将是这样的:
ej83mcc02#
建议:使用
char*
。对于该类型,C++允许您将任何指针强制转换为该类型并使用reinterpret_cast<char*>(&obj)
。(假定为Obj obj;
。)如果需要使用
uint8_t*
(并且它不是char*
的typedef),可以分配足够的内存并执行memcpy
: