C++ stringstream 添加额外的字节

C++ stringstream adding extra bytes

我想从我仍在学习 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.

我做错了什么?

此处使用的

std::stringstreamoperator<<(char const*) 将其参数视为以零结尾的 C 样式字符串,而您的 randData 数组不是以零结尾的。

因为 randData 并不是真正的 C 风格字符串,看起来它最终可能包含空字节,解决方法是使用

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

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