struct -> bit field -> offsetof()
От: Zberik  
Дата: 19.09.06 14:35
Оценка:
Здравствуйте, уважаемый All
Помогите пожалуйста в следующем деле — необходимо вычислить оффсет по размерности бита (а не char) битового поля в струтурах.
Условия:
1) существуют разные структуры S1, S2, ..., SN
2) в каждой структуре как то неравномерно расположены разные переменные, среди которых есть битовые поля,никакого закона в их расположении внутри структуры нет, за исключением того, что битовые поля должны быть выровнены по байту.
Например,

#ifndef BIT_FIELD_TYPE
#if (_MSC_VER <= 600)
#define BIT_FIELD_TYPE unsigned int
#else
#define BIT_FIELD_TYPE unsigned short
#endif
#endif

#pragma pack(1)
typedef struct S1 {
char a[17];
double d;
BIT_FIELD_TYPE bf0 :1;
BIT_FIELD_TYPE bf1 :1;
BIT_FIELD_TYPE bf2 :1;
BIT_FIELD_TYPE bf3 :1;
BIT_FIELD_TYPE bf4 :1;
BIT_FIELD_TYPE bf5 :1;
BIT_FIELD_TYPE bf6 :1;
BIT_FIELD_TYPE bf7 :1;
char asdf[128]
}
#pragma pack()

Хотелось бы получить что-то типа
int offset = offsetofBit(S1, bf4) // == 204
offset = offsetofBit(S1, bf1) // == 200

Как это реализовать наиболее эффективно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.