如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)

How to read substitution char with ifstream in C++ ? (SUB in ASCII)

本文关键字:字符 替换 ASCII SUB 中的 ifstream C++ 读取      更新时间:2023-10-16

我很难找出为什么我无法使用 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(ASCII 中的 SUB)时我遇到了问题,因为 input_stream.get(26) 返回 false 并且我退出了我的 while 循环。我想在我的字符串输入中输入文件中的所有字符,包括 SUB。我一开始尝试使用getline功能,但遇到了类似的问题。你能帮我吗?

您需要读取二进制流,而不是文本流(因为 SUB'0x1a'(即 26)是 ASCII 或 UTF8 中的控制字符,而不是可打印字符)在打开时使用 ios::binary:

 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());

您是否考虑过使用 std::getline 来读取整行,假设输入文件仍然组织在('n'终止)行中?