Здравствуйте, Tarhall, Вы писали:
T>Есть структура:
T>typedef struct _HARDWARE_CONT_02{
T> BYTE command; // Код команды посылки
T> unsigned lamp :1; // Лампочка
T> unsigned zero_02_08 :7; // Резерв 0
T> _HARDWARE_CONT_02() { command=0x22; zero_02_08=0; };
T>} H_CONT_02, *LPH_CONT_02;
T>Очень хочется, что бы эта структура занимала 2 байта, а не
T>получается? Можно ли это сделать и если нельзя, то как более
T>удобно осушествлять доступ к значениям битов, если учесть, что
T>эта стуктура тривиальная, а их еще 16 и далеко не все переменные
T>однобитовые.
Не... Два байта она занимать не будет в любом случае — минимальная
адрессуемая еденица информации — байт, но никак не бит.
А доступ — макрос вида:
Например:
// x - переменная, в которой надо протестить бит (любой целочисленный тип)
// y - номер бита (с нуля) (строго char)
// я - переменная, куда помещать результат ( строго char)
#define get_bit(x, y, z) __asm xor edx, edx \
__asm movzx eax, x \
__asm bt eax, y \
__asm adc dl, 0x00 \
__asm mov byte ptr [z], dl
Заюзать это можно так:
int a = 0x0a; // (0000.1010)
int b = 0;
get_bit(a, 1, b);
// имеем в b еденницу
... << RSDN@Home 1.1.3 stable >>