cpp
int main()
{
unsigned char puc[4];
struct man
{
unsigned char zhang;
unsigned char san : 1;
unsigned char shuai : 2;
unsigned char bi : 3;
}*dashuaibi;
dashuaibi = (struct zs*)puc;
memset(puc, 0, 4);
dashuaibi->zhang = 2;
dashuaibi->san = 3;
dashuaibi->shuai = 4;
dashuaibi->bi = 5;
printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
return 0;
}
代码中的结构体man中所有创建的变量都是一个无符号char类型。其中zhang占1个字节(byte),san占1个字节也就是8位(bit)中的1位(bit)还剩下7bit,接下来shuai又占了2bit还剩5bit,最后bi占走剩下的3bit。所以结构体man总共开辟了2个字节。
把puc这个数组的首元素地址赋给结构体变量dashuaibi。memset是用来初始化数组的值全为0。
接下来给man结构体里面的值进行赋值。
2, 3, 4, 5它们的二进制分别是:
将它们存放入数组中如下:
注:VS编译器是小端存储的上述地址存放是小端存储
%02x的意思是以16进制形式表示出2位,不够2位补0。
所以打印出来的应该就是 02 29 00 00