Здравствуйте.
При записи в бинарный файл обнаружил в нем появление непонятных байтов вида СС СС. Откуда они берутся?
Вообще задача такая: Есть несколько структур (элементы только double, char, short) и одна общая структура, которая содержит по одному элементу каждой из структур.
После заполнения полей всех структур записываю общую структуру одним fwrite.
Обнаружил, что если записывать не общую структуру, а по порядку каждую из подструктур, то файл в итоге получается меньшего размера. Смотрю расхождения — там эти непонятные блоки СС СС по 4 или 6 байт.
Работаю в 2005 студии. Файловая переменная типа FILE*, функция записи fwrite.
Скорее всего из-за выравнивания.
struct d
{
char c;
int i;
};
std::cout << sizeof(d) << std::endl;
Дает 8, если не высталены никакие специальные флаги, чтобы не было выравнивания
Здравствуйте, andpar, Вы писали:
A> если не высталены никакие специальные флаги, чтобы не было выравнивания
Для VC это #pragma pack, т.е. надо примерно так
#pragma pack(push, 1)
struct d
{
char c;
int i;
};
#pragma pack(pop)
Перая ссылка в гугле по "pragma pack" выглядит вполне полезной:
Запись структур данных в двоичные файлы