ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
5 июля
1527579
IBAH (01.07.2025 13:38, просмотров: 1741)
Как изящней преобразовать битовое поле в битовую маску? 

Дано

//
#pragma pack(push,1)
typedef struct
  {
  unsigned char Link              :1;       
  unsigned char Speed100          :1;       
  unsigned char Duplex            :1;       
  unsigned char Err               :1;       
  unsigned char Konc              :1;       
  unsigned char En                :1;       //5   Разрешение записи
  unsigned char Save              :1;       //6   Запись
  unsigned char Reset             :1;       //7   Сброс
  unsigned char Chang             :1;       
  unsigned char Alarm             :1;       
  unsigned char On                :1;       
  unsigned char Rzerv11           :1;       
  unsigned char Rzerv12           :1;       
  unsigned char Rzerv13           :1;       
  unsigned char Rzerv14           :1;       
  unsigned char Rzerv15           :1;       
  }                              
  RegSost_t;                     
#pragma pack(pop)


RegSost_t RegSost; //Регистр состояния





//

Надо скопировать только биты En и Reset

ничего умнее не придумал как копировать последовательно

//
RegSost.En    = ((RegSost_t*)(&(ModBusOutReg[0])))->En;  
RegSost.Reset = ((RegSost_t*)(&(ModBusOutReg[0])))->Reset;  

//

Может есть способы эффективнее?