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::stringstream
的 operator<<(char const*)
将其参数视为以零结尾的 C 样式字符串,而您的 randData
数组不是以零结尾的。
因为 randData
并不是真正的 C 风格字符串,看起来它最终可能包含空字节,解决方法是使用
s1Stream.write(randData, sizeof(randData));
请注意,此问题也适用于 zeroVal
,除了 zeroVal
的任何内容都不会写入 s1Stream
,因为它在第一个字节处以零结尾。
我想从我仍在学习 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::stringstream
的 operator<<(char const*)
将其参数视为以零结尾的 C 样式字符串,而您的 randData
数组不是以零结尾的。
因为 randData
并不是真正的 C 风格字符串,看起来它最终可能包含空字节,解决方法是使用
s1Stream.write(randData, sizeof(randData));
请注意,此问题也适用于 zeroVal
,除了 zeroVal
的任何内容都不会写入 s1Stream
,因为它在第一个字节处以零结尾。