Я хочу написать без каких-либо преобразований, например строк.std :: stringstream и std :: ios :: binary
У меня есть следующий код:
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()
, и он также имел тот же результат.
В 'output.bad()' была решена с помощью 'зЬй :: выход stringstream (станд :: stringstream :: в | станд :: stringstream :: из | std :: stringstream :: binary); ' И' std :: ios :: binary' ничего не делал. Ошибка заключалась в том, что другой фрагмент кода, который писал содержимое в файл (для отладки), не использовал 'std :: ios :: binary'. – rioki
Вы уверены, что двоичный файл не используется? Из документа: http://en.cppreference.com/w/cpp/io/basic_istringstream/basic_istringstream – galinette
@galinette: Да, я уверен. Я никогда не видел, чтобы это имело эффект на практике, и стандарт определяет его эффект только при разговоре о потоках, основанных на файлах. Аналогично, ссылка «двоичный режим» на упомянутой странице указывает на страницу о «C-style * file * I/O». Конечно, если у вас есть доказательства обратного, сообщите об этом, чтобы ответ можно было обновить. –