Я хочу записать в a 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
поврежденный?
Любые идеи, как я могу получить содержание в a std::stringstream
в соответствующем формате? Я пытался поместить содержание в a std::string
и затем использование write()
и это также имело тот же результат.
AFAIK, флаг binary
применяется только к fstream
, а stringstream
никогда не делает преобразование перевода строки, так что здесь он бесполезен.
Более того, флаги, передаваемые в ctor stringstream
, должны содержать in
, out
или оба. В вашем случае необходимо out
(а еще лучше использовать ostringstream
), иначе поток не находится в режиме вывода, поэтому запись в него не удается.
stringstream
Параметр "mode" ctor'а имеет значение по умолчанию in|out
, что объясняет, почему все работает правильно, когда вы не передаете никакого аргумента.
Попробуйте использовать
std::stringstream output(std::stringstream::out|std::stringstream::binary);