Двоичный файл оказывается меньше в Windows, чем в Linux - PullRequest
1 голос
/ 17 ноября 2011

Я работаю над программой, которая записывает двоичные данные в файл. В Windows результирующий файл по некоторым причинам немного меньше, чем в Linux. Размер в байтах и ​​хэш MD5 различны. Как это может случиться с одним и тем же кодом?

Я уже добавил флаг ifstream::binary и убедился, что установил noskipws ...

ofstream output("output", ifstream::binary);
output << std::noskipws;

Я запустил Application Verifier на моей программе, и он не генерировал ошибок или предупреждений относительно возможного повреждения памяти.

Существуют ли другие причины, по которым вывод файла может отличаться?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Разница, вероятно, связана с различными средами разработки.Различные компиляторы, аппаратные средства и операционные системы могут изменять формат основных данных.Например, разные компиляторы могут упаковывать ваши структуры данных с разной степенью эффективности.Кроме того, ваши основные типы (целые, длинные, плавающие и т. Д.) Могут быть разных размеров из-за разных процессоров.

Короче говоря, программы, которые требуют кросс-платформенной совместимости между двоичными данными, разрабатывают очень точные правила для упаковки структур и значений в двоичный формат (часто на местах, и одинаково точные правила для чтения данных.

1 голос
/ 17 ноября 2011

Не видя точно, что вы пишете в файл и как вы его называете, трудно дать действительно полезный ответ, но если вы используете оператор вставки потока (он же форматированный оператор вывода), чтобы сделать ваш файлзаписи, то любые нестроковые данные будут преобразованы в строки в соответствии с вашими настройками локали.Если это то, что вы на самом деле делаете, использование ofstream::binary кажется несколько бессмысленным, потому что вы все равно просто пишете текст.

Я бы рекомендовал создать наименьший возможный пример, для которого есть разница, и проверить вывод вшестнадцатеричный редактор, чтобы увидеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...