Я читаю текстовый файл ASCII. Он определяется размером каждого поля в байтах. Например. Каждая строка состоит из 10 байтов для некоторой строки, 8 байтов для значения с плавающей запятой, 5 байтов для целого числа и так далее.
Моя проблема заключается в чтении символа новой строки, который имеет переменный размер в зависимости от операционной системы (обычно 2 байта для Windows и 1 байт для Linux).
Как я могу получить размер символа EOL в C ++?
Например, в Python я могу сделать:
len(os.linesep)
Достойный времени способ сделать это — прочитать строчку.
Теперь последний символ должен быть \n
, Сними это. Затем посмотрите на предыдущего персонажа. Это будет либо \r
или что-то другое. Если это \r
Раздень это.
Для текстовых файлов Windows [ascii] других возможностей нет.
Это работает, даже если файл смешан (например, некоторые строки \r\n
а некоторые просто \n
).
Вы можете предварительно сделать это в несколько строк, просто чтобы убедиться, что вы не имеете дело с чем-то странным.
После этого вы теперь знаете, чего ожидать от большей части файла. Но метод стриптиз является общим надежным способом. В Windows вы можете импортировать файл из Unix (или наоборот).
Я не уверен, что перевод происходит там, где вы думаете. Посмотрите на следующий код:
ostringstream buf;
buf<< std::endl;
string s = buf.str();
int i = strlen(s.c_str());
После этого, работая в Windows, я == 1. Таким образом, определение конца строки в std — 1 символ. Как прокомментировали другие, это символ «\ n».