关于在TCP缓冲区中序列化vector <int32_t>?

时间:2016-04-04 07:18:22

标签: c++ sockets portability tcp-ip

我想在缓冲区中预先设置矢量的大小。但我不知道究竟是什么类型的大小。毕竟,std :: size_t不能是固定大小。在我看来,我打算用uint64_t代替。然后缓冲区会这样:

8 bytes length | 4 bytes element1 | 4 bytes element2 | ... |

现在问题是uint64_t并不意味着std :: size_t。任何更好的想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用您想要的任何类型,只要它可以保存您正在使用的值。因为它已经是size_t,所以请保持这种状态。确定要用于表示值的字节数以及每个字节需要的值,并编写代码以正确编码/解码每个字节。

答案 1 :(得分:1)

你快到了。目前没有平台使用size_t大于64位(并且需要几天才能将64位的int32转移到实验性的100TBit光纤上)。步骤是:

  1. const uint64_t len = vec.length();
  2. 按照定义的顺序将8个字节写入tcp缓冲区。
  3. 按照定义的顺序将每个int的四个字节写入tcp缓冲区。
  4. 发送。
  5. 请注意,最后两个步骤必须在一个循环中超过几千个元素..