Трудно сказать, что или почему вы будете работать вокруг чего-либо, без объяснения ваших ожиданий и полного перечня кодов.
Однако важно понимать кодировку символов при чтении и написаниив файл.
Символ новой строки занимает байт.Это значение 0x0A, если мы используем набор символов ASCII.Есть и другие кодировки символов, кроме ASCII.Например, есть кодировки UTF-8 или UTF-16.Каждая кодировка символов может иметь различное байтовое или многобайтовое представление для читаемого текстового символа, а также нечитаемых текстовых символов, таких как символ новой строки.
В Windows существует соглашение об использовании возврата каретки с последующимпереводом строки, а не просто переводом строки.Эти два байса будут выглядеть как 0x0D, 0x0A в ASCII.В * nix системах такого соглашения нет.
Поэтому, когда вы подсчитываете байты в своем fstream, вам нужно будет учитывать, что символ новой строки занимает байт, или два байта, если вы ожидаете '\r \ n ', то есть, если вы используете кодировку ASCII.
Насколько я знаю, fstream предполагает, что его содержимое является ASCII.Это могло измениться с C ++ 17.Я думаю, что были планы поддерживать различные кодировки символов в потоках.Те, кто находится на переднем крае, могут комментировать.
Ваша операционная система имеет кодировку символов по умолчанию, установленную где-то в ее конфигурации.Я знаю, что старые машины Windows использовали Windows-1252.Я не уверен, что Windows 10 использует.Я думаю, что большинство * nix систем используют UTF-8.В любом случае, вы захотите обратиться к конфигурации своей операционной системы.
Потоки C ++ будут хотеть преобразовывать один в другой, когда вы читаете и записываете в файл.Преобразование текста в его байтовое представление - это большая часть того, что потоки пытаются сделать для вас.
Если вы не хотите, чтобы представление байтов, которое будет предоставлять поток, вы можете чувствовать себя свободно.записывать байты самостоятельно, как вам угодно, в двоичном режиме.Однако помните, как это влияет на других читателей файла и какую кодировку они ожидают.
Итак, имейте в виду, кто создал файл, как он выглядит как текст, каково его двоичное представление вфайл, и в памяти, и код для него соответственно.
К счастью для нас, некоторые кодировки также содержат весь набор символов ASCII и просто расширяют его.UTF-8 - одна из таких кодировок, которая делает это.
Вы можете обратиться к В чем разница между \ n и \ r \ n? для обсуждения этой темы.
Вы также можете обратиться к Разницамежду файлами, написанными в двоичном и текстовом режиме
"Стандартные потоки и языки IOS C ++: Расширенное руководство для программиста и справочник Анджелики Лангер и Клауса Крефта" - хорошая книга, если вы действительно хотите узнать своипотоки внутри и снаружи.