201806078
最近需要“操作某一位”数据,开始接触位域,记录。
基础
位域声明和结构体基本一致,以下是位域的声明示例:
typedef struct __Sys_Ctrl {
unsigned int Rst : 1; // bit 0
unsigned int NotUsed : 31; // bit 1-31
} Sys_Ctrl;
初始化操作如下:
Sys_Ctrl sys_ctrl;
sys_ctrl.Rst = 0;
sys_ctrl.NotUsed = 20;
sizeof(Sys_Ctrl);
通过sizeof(Sys_Ctrl);
我们可以得到变量的大小为4字节,与unsigned int
的相同,因此我们可以将该结构体赋值给unsigned int
。
unsigned int x = *(unsigned int*)&sys_ctrl;
姑且不管赋值之后会以何种方式解析(后续下文会谈到),我们在内存层面看到01的直接赋值。
可见是内存的直接拷贝。最后得到的结果是2d 00 00 00
按整数解析,得到45。