c++ - 编码或打包可以由 union 来实现吗?

标签 c++ c marshalling packing

在 beej 的网络指南中,有一节是为序列化编码或打包数据,他在其中描述了打包和解包数据的各种函数(int、float、double ..等)。

使用下面定义的 union(类似于可以为 float 和 double 定义)并将 integer.pack 作为 integer.i 的打包版本传输比 pack 和 unpack 函数更容易。

union _integer{
  char pack[4];
  int i;
}integer;
  1. 有人可以阐明为什么 union 是一个糟糕的选择吗?

  2. 有没有更好的打包数据的方法?

最佳答案

不同的计算机可能会以不同的方式排列数据。经典问题是字节顺序(在您的示例中,包 [0] 是否具有 MSB 或 LSB)。使用这样的 union 将数据与生成它的计算机上的特定表示联系起来。

如果您想了解其他编码数据的方法,请查看 Boost serializationGoogle protobuf .

关于c++ - 编码或打包可以由 union 来实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337061/

相关文章:

c++ - 尝试在 C++ 中读取一行键盘输入

c - 为什么它在 spoj 上显示 sigsegv 错误..?

json - 编码到 JSON 结构扩展了另一个具有相同字段标签的结构

c++ - 具有链接列表成员的派生类的复制构造函数

c++ - 修改boost多索引容器项

c - 做 while 和右移没有效果

c# - 如何从 C 调用 C# 以传递具有数组作为成员的结构数组?

json - 在go中动态编码json键

c++ - 用 C 和 C++ 最快的输出到文件

c - 如何让用户决定何时停止 for 循环计数(C 编程)