我想写一个std::stringstream
而没有任何转换,比如行结尾。
我有以下代码:
void decrypt(std::istream& input, std::ostream& output)
{
while (input.good())
{
char c = input.get()
c ^= mask;
output.put(c);
if (output.bad())
{
throw std::runtime_error("Output to stream failed.");
}
}
}
以下代码就像魅力一样:
std::ifstream input("foo.enc", std::ios::binary);
std::ofstream output("foo.txt", std::ios::binary);
decrypt(input, output);
如果我使用以下代码,我会遇到输出处于错误状态的std::runtime_error
。
std::ifstream input("foo.enc", std::ios::binary);
std::stringstream output(std::ios::binary);
decrypt(input, output);
如果我删除std::ios::binary
解密函数完成且没有错误,但我最终将CR,CR,LF作为行结尾。
我正在使用VS2008并且尚未在gcc上测试代码。这是它应该表现的方式还是MS的std::stringstream
被破坏的实现?
我是如何以正确的格式将内容导入std::stringstream
的?我尝试将内容放入std::string
,然后使用write()
,结果也相同。
答案 0 :(得分:12)
AFAIK,binary
标记仅适用于fstream
,而stringstream
从不进行换行转换,因此在此处最无用。
此外,传递给stringstream
的ctor的标记应包含in
,out
或两者。在您的情况下,out
是必要的(或者更好,使用ostringstream
)否则,流不处于输出模式,这就是写入它失败的原因。
stringstream
ctor的“mode”参数的默认值为in|out
,这解释了当您未传递任何参数时,事情正常工作的原因。
答案 1 :(得分:-2)
尝试使用
std::stringstream output(std::stringstream::out|std::stringstream::binary);