Почему C ++ stringstream пропускает первый байт при чтении файла - PullRequest
0 голосов
/ 10 марта 2020

Мой код выглядит так:

   using namespace std;

    string pth("./xxx.pb");
    ifstream fin(pth, ios::in | ios::binary | ios::ate);
    int len = fin.tellg();
    fin.seekg(0);

    cout << "compare:\n";
    string s1(len, 0);
    fin.read(&s1[0], len);
    for (auto &el : s1)
        cout << (int)el << ", ";
    cout << endl;

    fin.clear();
    fin.seekg(0);
    stringstream ss;
    fin >> ss.rdbuf();
    for (auto &el : ss.str())
        cout << (int)el << ", ";
    cout << endl;

Вывод выглядит так:

compare:
10, 5, 104, 101, 108, 108, 111, 18, 2, 4, 6, 26, 7, 102, 108, 111, 97, 116, 51, 50, 32, 3, 
5, 104, 101, 108, 108, 111, 18, 2, 4, 6, 26, 7, 102, 108, 111, 97, 116, 51, 50, 32, 3, 

Кажется, что поток строк пропустил первый байт при чтении из файла. Откуда моя проблема?

1 Ответ

0 голосов
/ 10 марта 2020

Использование fin >> для ввода строки пропустит начальный пробел. См. cppreference :

Ведет себя как FormattedInputFunction. После создания и проверки объекта sentry, который может пропустить начальные пробелы, ...

Таким образом, символ перевода строки (чей ASCII равен 10) в начале вашего файла пропускается.

...