Как прочитать замену char с ifstream в C ++? (SUB в ASCII)

Мне трудно понять, почему я не могу прочитать все символы с помощью функции fstream get.
Мой код следующий:

ifstream input_stream(input_filename.c_str(), ios::in);
string input;

if(input_stream)
{
char character;
while(input_stream.get(character))
{
input += character;
}
input_stream.close();
}
else
cerr << "Error" << endl;

Проведя небольшое тестирование, я обнаружил, что у меня возникает проблема, когда символ = 26 (SUB в ASCII), потому что input_stream.get (26) возвращает false, и я выхожу из цикла while.
Я хотел бы вставить в строку ввода все символы из файла, включая SUB.
Сначала я попробовал использовать функцию getline, и у меня возникла похожая проблема.
Не могли бы вы мне помочь, пожалуйста ?

1

Решение

Вам необходимо прочитать двоичный поток, а не текстовый (так как SUB то есть '0x1a' (то есть 26) является управляющим символом в ASCII или UTF8, а не для печати) ИОС :: бинарными во время открытия:

 ifstream input_stream(input_filename.c_str(), ios::in | ios::binary);

Может быть, вы бы тогда код

 do {
int c= input_stream.get();
if (c==std::char_traits::eof()) break;
input += (char)c;
} while (!input_stream.fail());

Вы рассматривали возможность использования станд :: GetLine читать всю строку, предполагая, что входной файл все еще организован в ('\n' прекращено) линии?

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]