将结构转换为字节向量

gln*_*gln 4 c++ struct vector

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

typedef struct 
{
int a;
int b;
char *c
}MyStruct
Run Code Online (Sandbox Code Playgroud)

我有这个例子:

MyStruct s;
Run Code Online (Sandbox Code Playgroud)

我也有这个定义:

vector<byte> buffer;
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Kon*_*lph 13

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

auto ptr = reinterpret_cast<byte*>(&s);
auto buffer = vector<byte>(ptr, ptr + sizeof s);
Run Code Online (Sandbox Code Playgroud)

换句话说,您可以将字节缓冲区转换为目标类型(但它必须是相同类型,否则您将违反严格别名):

auto p_obj = reinterpret_cast<obj_t*>(&buffer[0]);
Run Code Online (Sandbox Code Playgroud)

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