在其中使用union和struct序列化struct

时间:2015-08-02 15:07:39

标签: c serialization

typedef struct { 
 union { 
  char a[8]; 
  struct { 
    unsigned long z; 
    unsigned long o; 
  } ss; 
 } ss; 
} st3;

我在内存中有这个结构我想将它序列化为我可以使用的结构,如何正确序列化? 感谢。

1 个答案:

答案 0 :(得分:3)

早上好在他的评论中,你必须知道工会包含什么。通常,定义结构如:

typedef struct { 
 int union_type;
 union { 
  char a[8]; 
  struct { 
    unsigned long z; 
    unsigned long o; 
  } ss; 
 } ss; 
} st3;

其中union_type表示联合是否包含char数组或结构。如果你知道这一点,你可以序列化结构,接收者可以重新构造它,因为在序列化联合之前,你输出union_type然后输出正在使用的成员(字符或结构)。

有一种替代方法:确定联合的最大组件(此处不相关),并将其输出为二进制字节,例如:作为\x1a\x1b...的列表。那你就不需要知道工会里有什么了。如果接收器像这样重新组装它,它将完美转移的对象传递给功能程序,让我们希望知道联合所包含的东西......一个注意:这个方法要求两个机器的字节顺序是同样的,否则多头将被重新组装错误。