|  | 
 
| 
本帖最后由 jianhong_wu 于 2017-8-20 10:37 编辑
x
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有帐号?立即注册  
 子非-苏州:
 共用体,每一项完全共用内存首地址,我用在对32位寄存器的操作上面,里面的四项很方便操作,比如32位转4个8位:
 
 复制代码union t_un32{
unsigned char    un08[4];
uint16_t   un16[2];        
uint32_t   un32;
long       sun32;
};
只要存在这个内存里面,就不需要移位转换了。
 
 
 
 怀念依旧-顺德:
 单字节转8位,如下:
 
 
 复制代码typedef unsigned char uchar; 
typedef unsigned int uint;
typedef unsigned long ushort;
union        byte_type_t
{
uchar byte;
struct p8_bit
{
  char B0:1        ; // 1 
  char B1:1        ; // 2 
  char B2:1        ; // 3 
  char B3:1        ; // 4 
  char B4:1        ; // 5 
  char B5:1        ; // 6 
  char B6:1        ; // 7 
  char B7:1        ; // 8 
}  bits;
};
 双字节转16位,如下:
 
 复制代码typedef volatile union byte_type_t BYTE;
union        word_type_t
{
ushort word;
struct p16_bit
{
  char bit0:1        ; // 1 
  char bit1:1        ; // 2 
  char bit2:1        ; // 3 
  char bit3:1        ; // 4 
  char bit4:1        ; // 5 
  char bit5:1        ; // 6 
  char bit6:1        ; // 7 
  char bit7:1        ; // 8 
  char bit8:1        ; // 9 
  char bit9:1        ; // 10 
  char bit10:1        ; // 11 
  char bit11:1        ; // 12 
  char bit12:1        ; // 13 
  char bit13:1        ; // 14 
  char bit14:1        ; // 15 
  char bit15:1        ; // 16   
}  bits;
};
结构体里面是一个char类型这样写的就可以了。我是做小家电那一块的,占内存是非常关键的。
 
 
 
 
 | 
 |