struct Frame {
unsigned char Sync;
double Temper;
};
В таком виде sizeof(Frame) дает 16
struct Frame {
//unsigned char Sync;
double Temper;
};
так 8
struct Frame {
unsigned char Sync;
//double Temper;
};
А так 1.
Почему выравнивание производится по размеру типа double

. Из-за этого немогу нормально прочитать структуру из файла. Помогите плз.
Здравствуйте, Zlon, Вы писали:
Z>struct Frame {
Z> unsigned char Sync;
Z> double Temper;
Z> };
Z>В таком виде sizeof(Frame) дает 16
Z>struct Frame {
Z> //unsigned char Sync;
Z> double Temper;
Z> };
Z>так 8
Z>struct Frame {
Z> unsigned char Sync;
Z> //double Temper;
Z> };
Z>А так 1.
Z>Почему выравнивание производится по размеру типа double
. Из-за этого немогу нормально прочитать структуру из файла. Помогите плз.
Выравнивание устанавливается так:
#pragma pack(push,1)
struct Frame
{
unsigned char Sync;
double Temper;
};
#pragma pack(pop)
Z>struct Frame {
Z> unsigned char Sync;
Z> double Temper;
Z> };
Z>В таком виде sizeof(Frame) дает 16
Попробуй так:
struct Frame {
double Temper;
unsigned char Sync;
};
В твоем случае, если установить выравнивание в 1 байт, будет неэффективное обращение к double
К сожалению эту структуру в файл не я писал
Так что придется обращаться неэффективно
Здравствуйте, Zlon, Вы писали:
Z>К сожалению эту структуру в файл не я писал
Z>Так что придется обращаться неэффективно
Только имей в виду, что
#pragma pack(1)
есть только в MSVC и, вообще, все прагмы компиляторо-зависимы.
Здравствуйте, Тигра, Вы писали:
Т>Только имей в виду, что
Т>Т>#pragma pack(1)
Т>
Т>есть только в MSVC
А ещё в Intel, Comeau и других подогнанных под VS
... << RSDN@Home 1.1.4 @@subversion >>
Здравствуйте, Sir Wiz, Вы писали:
Т>>Т>>#pragma pack(1)
Т>>
Т>>есть только в MSVC
SW>А ещё в Intel, Comeau и других подогнанных под VS
А как это сделать в gcc?
Здравствуйте, Sergeant, Вы писали:
S>А как это сделать в gcc?
#pragma pack(1)