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

一、位域是什么?

位域是一种比字节还小的比特位数据,它可以是一个比特位,也可以是多个比特位一起组成。高级语言或许很少接触位域的使用,但是从事嵌入式开发的工程师一定不会陌生,它简洁明了,但是使用起来却需要知道当前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网卡驱动的某些数据的定义)。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页