我正在尝试使用wstringstreams作为缓冲区来序列化一些数据。
我遇到的问题是数据以某种方式损坏了。要详细说明问题,请查看以下代码段:
std::vector<long> items;
for (long i = 0; i < 100; ++i)
{
items.push_back(-1);
}
std::wstringstream ws;
for (auto & val : items)
{
ws.write((wchar_t *)&val, sizeof(long));
}
auto resultStr = ws.str();
我期待最后resultStr的长度为100 * sizeof(long)
。但我得到的大小是2
。有趣的是,不是将-1
插入到items容器中,而是插入1,而resultStr是预期的100 * sizeof(long)
大且具有正确的内容。
使用正常的字符串流也可以获得正确的结果。
为什么基于wchar_t的流会搞乱-ve值的处理?
P.S。我在Windows 7上,vs2015 upadate3并编译代码并在x86调试上运行