Re: Выравнивание! Или как лучше это сделать?!
От: valytch Беларусь  
Дата: 30.03.04 23:37
Оценка:
Здравствуйте, 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 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.