赞
踩
结构体中可以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或“位域”( bit field) 。利用位段能够用较少的位数存储数据。
位段的好处:
此外
int
, unsigned int
, signed int
, char
, unsigned char
, signed char
类型struct A
{
int _a : 2;
int _b : 3;
char c : 1;
char d : 4;
};
对于下面这个结构体中的位段
struct S
{
char a : 3;
char b : 4;
char c : 5;
char d : 4;
};
内存分配图如下(VS环境)
注意:
与结构体将比,位段能够更大限度的节约内存空间,但是存在跨平台问题, 需谨慎使用。
练习:
unsigned char puc[4];
struct tagPIM
{
unsigned char n;
unsigned char a : 1;
unsigned char b : 2;
unsigned char c : 3;
}*pstPimData;
pstPimData = (struct tagPIM*)puc;
memset(puc,0,4);
pstPimData->n = 2;
pstPimData->a = 3;
pstPimData->b = 4;
pstPimData->c = 5;
printf("%02x %02x %02x %02x\n",puc[0], puc[1], puc[2], puc[3]);
vs环境下其内存分布分析
%02x 以16进制位打印,打印两位,不够两位用0填充
(%2x 以16进制位打印,打印两位,不够两位用空格填充)
即打印结果为 02 29 00 00
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。