一、写在前面
在c语言的结构体成员类型中,有一种位域,可以使我们定义制定二进制长度的参数,往往这样可以帮我们节省内存。在正常采用常规的结构体成员读写时,不会出现什么问题。但是,在使用指针方式批量访问时,往往需要考虑内存的存储模式即,大小端模式。下面以实例方式,给出大小端对结构体位域操作的一些影响点。
二、结构体位域操作与大小端那些事
1、不考虑位域对齐情况下的存储结构
某几个数据位的和小于其数据类型时,即依照下面结构体(b1+b2+b3+b4+b5<sizeof(int))
定义结构体如下:
struct BitOperationType{
int b1:1;
int b2:2;
int b3:3;
int b4:4;
int b5:5;
};
存储结构如下。(注,对于大端的存储方式,仅仅参考博客上一些知识点,理论推导,大端模式的图仅仅作为一个指导,在实际使用时,需要结合具体的硬件平台;小端模式是在电脑平台上进行测试的。)
2、考虑字节对齐情况下的位域参数
定义如下结构体
struct BitOperationType{
unsigned char b1:2;
unsigned char b2:3;
unsigned char b3:5;
unsigned char b4;
unsigned char b5:3;
};
其存储结构如下注(对于大端的存储方式,仅仅参考博客上一些知识点,理论推导,大端模式的图仅仅作为一个指导,在实际使用时,需要结合具体的硬件平台;小端模式是在电脑平台上进行测试的。)