位段 位域

单片机使用的是小端(小尾)模式,电脑使用的是大端(大尾)模式,所以定义位段时不一样。

电脑使用

#pragma pack (1)

typedef union _BYTE_BITS
{
BYTE byte;
struct
{
    unsigned char bit0:1;//最低位	  
    unsigned char bit1:1;
    unsigned char bit2:1;
    unsigned char bit3:1;
    unsigned char bit4:1;
    unsigned char bit5:1;
    unsigned char bit6:1;
    unsigned char bit7:1;//最高位
} bits;//在内存中的实际情况:7 6 5 4 3 2 1 0
} BYTE_BITS;

  typedef union _WORD_BYTES
{
    WORD word;
    BYTE bytes[2];
    struct
    {	        
        BYTE low;	 //低字节在前
		BYTE high;	 
    } byte;
    struct
    {
        unsigned char bit0:1;//low字节最低位
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;//low字节最高位
		unsigned char bit8:1;//high字节最低位		  
        unsigned char bit9:1;
        unsigned char bit10:1;
        unsigned char bit11:1;
        unsigned char bit12:1;
        unsigned char bit13:1;
        unsigned char bit14:1;
        unsigned char bit15:1; //high字节最高位       
    } bits;//在内存中的实际情况:7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8
} WORD_BYTES;

typedef union _DWORD_BYTE
{
    DWORD dword;
	WORD words[2];
    BYTE bytes[4];
    struct
    {
        WORD low;	 //低字节在前
		WORD high;        
    } word;
    struct
    {
        BYTE B4;	 //低字节在前	
        BYTE B3;
        BYTE B2;
        BYTE B1;
    } byte;
    struct
    {
        unsigned char bit0:1;//B4字节最低位			
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1; //B4字节最高位
		unsigned char bit8:1;//B3字节最低位
        unsigned char bit9:1;
        unsigned char bit10:1;
        unsigned char bit11:1;
        unsigned char bit12:1;
        unsigned char bit13:1;
        unsigned char bit14:1;
        unsigned char bit15:1;//B3字节最高位
		unsigned char bit16:1;//B2字节最低位
        unsigned char bit17:1;
        unsigned char bit18:1;
        unsigned char bit19:1;
        unsigned char bit20:1;
        unsigned char bit21:1;
        unsigned char bit22:1;
        unsigned char bit23:1;//B2字节最高位
		unsigned char bit24:1;//B1字节最低位
        unsigned char bit25:1;
        unsigned char bit26:1;
        unsigned char bit27:1;
        unsigned char bit28:1;
        unsigned char bit29:1;
        unsigned char bit30:1;
        unsigned char bit31:1;	//B1字节最高位	       
    } bits;//在内存中的实际情况:7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8 23 22 21 20 19 18 17 16 31 30 29 28 27 26 25 24
} DWORD_BYTES;	
     
#pragma pack ()

单片机使用

typedef union _BYTE_BITS
{
    BYTE byte;
    struct
    {
        unsigned char bit0:1;//最低位	   
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;//最高位
    } bits;//在内存中的实际情况:7 6 5 4 3 2 1 0
} BYTE_BITS;

typedef union _WORD_BYTES
{
    WORD word;
    BYTE bytes[2];
    struct
    {	        
        BYTE high;	 //高字节在前
    	BYTE low;	 
    } byte;
    struct
    {
        unsigned char bit8:1;//high字节最低位		  
        unsigned char bit9:1;
        unsigned char bit10:1;
        unsigned char bit11:1;
        unsigned char bit12:1;
        unsigned char bit13:1;
        unsigned char bit14:1;
        unsigned char bit15:1;//high字节最高位
        unsigned char bit0:1;//low字节最低位
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;//low字节最高位
    } bits;//在内存中的实际情况:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
} WORD_BYTES;

typedef union _DWORD_BYTE
{
    DWORD dword;
    WORD words[2];
    BYTE bytes[4];
    struct
    {
        WORD high;	 //高字节在前
    	WORD low;        
    } word;
    struct
    {
        BYTE B1;	 //高字节在前	
        BYTE B2;
        BYTE B3;
        BYTE B4;
    } byte;
    struct
    {
        unsigned char bit24:1;//B1字节最低位
        unsigned char bit25:1;
        unsigned char bit26:1;
        unsigned char bit27:1;
        unsigned char bit28:1;
        unsigned char bit29:1;
        unsigned char bit30:1;
        unsigned char bit31:1;//B1字节最高位
    	unsigned char bit16:1;//B2字节最低位
        unsigned char bit17:1;
        unsigned char bit18:1;
        unsigned char bit19:1;
        unsigned char bit20:1;
        unsigned char bit21:1;
        unsigned char bit22:1;
        unsigned char bit23:1;//B2字节最高位
   		unsigned char bit8:1;//B3字节最低位
        unsigned char bit9:1;
        unsigned char bit10:1;
        unsigned char bit11:1;
        unsigned char bit12:1;
        unsigned char bit13:1;
        unsigned char bit14:1;
        unsigned char bit15:1;//B3字节最高位
    	unsigned char bit0:1;//B4字节最低位			
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1; //B4字节最高位       
    } bits;//在内存中的实际情况:31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16  15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
} DWORD_BYTES;	  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值