Лишние байты при записи в бинарный файл
От: Аноним  
Дата: 05.03.08 18:56
Оценка:
Здравствуйте.
При записи в бинарный файл обнаружил в нем появление непонятных байтов вида СС СС. Откуда они берутся?

Вообще задача такая: Есть несколько структур (элементы только double, char, short) и одна общая структура, которая содержит по одному элементу каждой из структур.
После заполнения полей всех структур записываю общую структуру одним fwrite.
Обнаружил, что если записывать не общую структуру, а по порядку каждую из подструктур, то файл в итоге получается меньшего размера. Смотрю расхождения — там эти непонятные блоки СС СС по 4 или 6 байт.

Работаю в 2005 студии. Файловая переменная типа FILE*, функция записи fwrite.
Re: Лишние байты при записи в бинарный файл
От: andpar  
Дата: 05.03.08 19:04
Оценка: +2
Скорее всего из-за выравнивания.
struct d
{
    char c;
    int i;
};

std::cout << sizeof(d) << std::endl;


Дает 8, если не высталены никакие специальные флаги, чтобы не было выравнивания
Re: Лишние байты при записи в бинарный файл
От: игппук Беларусь  
Дата: 05.03.08 20:23
Оценка:
файл должен быть открыт на запись двоихных данных

fopen("file_name", "b");
проклятый антисутенерский закон
Re[2]: Лишние байты при записи в бинарный файл
От: bnk СССР http://unmanagedvisio.com/
Дата: 05.03.08 21:09
Оценка:
Здравствуйте, andpar, Вы писали:

A> если не высталены никакие специальные флаги, чтобы не было выравнивания


Для VC это #pragma pack, т.е. надо примерно так

#pragma pack(push, 1)
struct d
{
    char c;
    int i;
};
#pragma pack(pop)

Перая ссылка в гугле по "pragma pack" выглядит вполне полезной: Запись структур данных в двоичные файлы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.