将struct转换为字节

cpx*_*cpx 8 c++

如何在具有little-endian的处理器上将任何结构转换为字节数组?

Jam*_*lis 13

您可以使用a char*来访问C++中的任何类型的对象,因此:

struct S
{
    int a;
    int b;
    // etc.
};

S my_s;

char* my_s_bytes = reinterpret_cast<char*>(&my_s);

// or, if you prefer static_cast:
char* my_s_bytes = static_cast<char*>(static_cast<void*>(&my_s));
Run Code Online (Sandbox Code Playgroud)

(关于对比的正确性至少存在一些争论 ;在实践中它并不重要 - 两者都应该产生相同的结果)reinterpret_caststatic_cast

  • @Michael:在这种情况下,C样式转换与`reinterpret_cast`相同,因为`static_cast`和`const_cast`的组合无效.使用C++样式转换可以保证你得到你想要的转换; C风格的演员基本上只是尝试了五种不同类型的演员阵容,直到找到一个有效的演员阵容. (3认同)

Whi*_*ind 5

I like to use a union.

typedef struct b {
  unsigned int x;
  unsigned int y;
} b_s;

typedef union a {
  b_s my_struct;
  char ary[sizeof(b_s)];
} a_u;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是`ary[sizeof(b)]`? (3认同)