C ++ stringstream添加额外的字节

时间:2015-01-29 09:46:59

标签: c++ c++11 stringstream

我想从我仍在学习C ++这一事实开始,其中一些事情仍令我感到困惑。

我想要完成的是构建一个字节流以通过套接字发送。我尝试为握手创建长度为1536字节的数据包

std::stringstream s1Stream;
char randData[1528], zeroVal[4] = {0, 0, 0, 0};
memset(&randData, 1, sizeof(randData)); // Fill the buffer with data

s1Stream << timestampVal; // 4 bytes
s1Stream << zeroVal; // 4 bytes
s1Stream << randData; // 1528 bytes

当我将s1Stream转换为字符串并检查该字符串的size()时,程序会说 1541 的大小。

我做错了什么?

1 个答案:

答案 0 :(得分:10)

此处使用的

std::stringstream operator<<(char const*)将其参数视为零终止的C样式字符串,并且您的randData数组不会以零结尾。

由于randData实际上不是C风格的字符串,并且看起来最终可能包含空字节,因此修复是使用

s1Stream.write(randData, sizeof(randData));

请注意,此问题也适用于zeroVal,但zeroVal的任何内容都不会写入s1Stream,因为它在第一个字节处以零终止。