станд.:: stringstream и станд.:: iOS:: двоичный файл

Я хочу записать в 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() и это также имело тот же результат.

6
задан rioki 22 February 2010 в 14:19
поделиться

2 ответа

AFAIK, флаг binary применяется только к fstream, а stringstream никогда не делает преобразование перевода строки, так что здесь он бесполезен.

Более того, флаги, передаваемые в ctor stringstream, должны содержать in, out или оба. В вашем случае необходимо out (а еще лучше использовать ostringstream), иначе поток не находится в режиме вывода, поэтому запись в него не удается.

stringstream Параметр "mode" ctor'а имеет значение по умолчанию in|out, что объясняет, почему все работает правильно, когда вы не передаете никакого аргумента.

12
ответ дан 10 December 2019 в 00:37
поделиться

Попробуйте использовать

std::stringstream output(std::stringstream::out|std::stringstream::binary);
-2
ответ дан 10 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: