结构体位断


  结构体中允许存在位段、无名字段以及字对齐所需的填充字段。这些都是通过在字段的声明后面加一个冒号以及一个表示字段位长的整数来实现。这些冒号后的整数规定了成员所占的位数。举例如下:  
typedef struct def
{
 char a : 4;
 char b : 4;
}Def;

void sizetest()
{
 int size ;
 char test;
 Def Mdata;
 Mdata.a=0xf0; //会截断,只取到前四位
 Mdata.b=0x0f; //截断,取前四位
 memcpy(&test , &Mdata , 1);
 size = sizeof(Mdata); //大小为一个字节
 printf("0x%x ",Mdata.a);
 printf("0x%x ",Mdata.b);
 printf("0x%x ",test);
 printf("%d" , size);
 
}    

结果:
0x00
0x0f
0xf0
1
(需要注意的是:测试机器是小端模式)

原文地址:https://www.cnblogs.com/ju-an/p/3238641.html