单片机使用的是小端(小尾)模式,电脑使用的是大端(大尾)模式,所以定义位段时不一样。
电脑使用
#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;