使用位域复制结构&动态数据转换为Char数组缓冲区

时间:2017-03-14 15:18:30

标签: c++ arrays struct bit-fields

我有一个像以下

的结构
struct Struct {
    int length; //dynamicTest length 
    unsigned int b: 1;
    unsigned int a: 1;
    unsigned int padding: 10;
    int* dynamicTest;
    int flag; 
}

我想将其复制到char数组缓冲区(通过套接字发送)。我很好奇我会怎么做。

1 个答案:

答案 0 :(得分:0)

准确地说,您使用memcpy执行此操作,例如:

#include <string.h>
/* ... */
Struct s = /*... */;
char buf[1024]
memcpy(buf, &s, sizeof(s));
/* now [buf, buf + sizeof(s)) holds the needed data */

或者你可以完全避免复制并查看一个struct实例作为char数组(因为计算机内存中的所有内容都是字节序列,这种方法有效)。

Struct s = /* ... */;
const char* buf = (char*)(&s);
/* now [buf, buf + sizeof(s)) holds the needed data */

如果您要通过网络发送它,您需要关注字节顺序,int大小和许多其他细节。

复制位字段没有问题,但对于动态字段,例如char*这种天真的方法不起作用。适用于任何其他类型的更通用的解决方案是serialization