我想从我仍在学习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 的大小。
我做错了什么?
答案 0 :(得分:10)
std::stringstream
operator<<(char const*)
将其参数视为零终止的C样式字符串,并且您的randData
数组不会以零结尾。
由于randData
实际上不是C风格的字符串,并且看起来最终可能包含空字节,因此修复是使用
s1Stream.write(randData, sizeof(randData));
请注意,此问题也适用于zeroVal
,但zeroVal
的任何内容都不会写入s1Stream
,因为它在第一个字节处以零终止。