一、位域是什么?

位域是一种比字节还小的比特位数据,它可以是一个比特位,也可以是多个比特位一起组成。高级语言或许很少接触位域的使用,但是从事嵌入式开发的工程师一定不会陌生,它简洁明了,但是使用起来却需要知道当前IDE存储的数据是大端还是小端。

二、怎么定义位域?

位域数据的定义需要用到C语言关键字struct,它也是一种数据结构,可以对某些比特位进行特殊的声明。比如某字节的含义如下图:

c语言进行位操作(C语言位域位段)(1)

位域

那么它的声明如下;

typedef struct w5500_control_phase { #ifdef LITTLE_ENDIAN uint8_t operation_mode:2; uint8_t access_mode_bit:1; uint8_t block_select_bits:5; #elif defined(BIG_ENDIAN) uint8_t block_select_bits:5; uint8_t access_mode_bit:1; uint8_t operation_mode:2; #endif }w5500_control_phase_t;

三、示例代码。

c语言进行位操作(C语言位域位段)(2)

位域示例源码

由于我使用的是Windows PC,数据默认是小端模式,从上图可以看到位域的使用方法与便捷。(BTW:其实上图举例的是W5500网卡驱动的某些数据的定义)。

,