通过TCP发送std :: vector <bool> </bool>

时间:2014-10-20 02:30:21

标签: c++ vector tcp

我有一个非常大(> 1百万元素)的std :: vector,我需要使用TCP套接字在两个进程之间发送。我使用std :: vector的原因是因为我宁愿将true和false作为单个位发送而不是占用整个字节(因为数据大小太大)。

我正在做一些小型测试用例,这样我就不会受到TCP的最大传输大小的限制,直到我知道一切正常。基本上,我正在做的是

int vec[bits->size()]; 
copy(bits->begin(), bits->end(), vec);

以便可以通过套接字发送它。显然,有些东西不起作用。如果vec包含1 0 1 0 1 0 1,则收到1000 0000 1000 0000 1000 0000 1000。

它明显扩展了副本中的位向量。我的问题是:如何将位向量重新解释为可以通过套接字发送的内容,同时保持原始向量的大小限制?

1 个答案:

答案 0 :(得分:2)

即使vector<bool>将数据存储为位,这对于通过迭代器进行访问也是透明的。因此,它按预期工作,将bool矢量复制到一个int数组中,将每个bool值转换为0或1的整数。您可以使用unsigned char *bit_ptr = reinterpret_cast<unsigned char *>(&bits[0])但它可以逃脱它不保证。您将需要处理向量并自己生成位或使用新的数据结构。您可以考虑某种动态bitset(我相信它有一个在Boost中)或者可能vector<bitset<N>>,使用for循环和bitset的to_ulong函数很容易转换为位数组