将结构转换为字节向量

Convert a struct to vector of bytes

本文关键字:字节 向量 转换 结构      更新时间:2023-10-16

在我的C++应用程序中,我有这个结构

typedef struct 
{
int a;
int b;
char *c
}MyStruct

我有一个例子:

MyStruct s;

我也有这个定义:

vector<byte> buffer;

我想插入\将s结构转换为缓冲区向量。

在C++中最好的方法是什么?

谢谢。

最好的方法是使用范围复制构造函数和低级强制转换来检索指向结构内存的指针:

auto ptr = reinterpret_cast<byte*>(&s);
auto buffer = vector<byte>(ptr, ptr + sizeof s);

另一种方法是,您可以将字节缓冲区强制转换为目标类型(但它必须是相同的类型,否则会违反严格的混叠):

auto p_obj = reinterpret_cast<obj_t*>(&buffer[0]);

然而,对于索引≠0(从技术上讲,我想对于索引=0也是,但这似乎不太可能),请注意内存对齐不匹配。因此,一种更安全的方法是首先将缓冲区复制到正确对齐的存储器中,然后从那里访问指针。