利用联合体拆分数据的bit位

1:目的

在工作中有时需要查看数据的每个bit位

2:解决方案

可以使用data>>offset这样的形式。
也可以使用联合体的形式,在联合体中有2个成员,一个是数据本身,一个是要拆分的数据结构体。由于联合体共用存储空间的特性,联合体中一个成员有值时,另一个成员也会同样的获得这个值,并且能以自己定义的形式来展示这个值。

3:示例

下面的示例中,有一个联合体,有两个成员一个以value,大小是8个bit。一个是结构体bits,有4个成员,总共占8个bit。当value有值时,对应的结构体bit也会有值,并且可以从地位到高位拆分到结构体bit的各个成员中去

/*******************************************************************************
  * @file          main.c
  * @verison       v1.0.0
  * @copyright     COPYRIGHT © 2020 CSG
  * @author        ShiYanKai
  * @date:         2021-06-07
  * @brief
  * @bug
  * - 2021-06-07  SYK Created
*******************************************************************************/

#include <stdio.h>
#include <stdint.h>


typedef union
{
    struct
    {   
        uint8_t bit0 : 1;
        uint8_t bit1_2 : 2;
        uint8_t bit3 : 1;
        uint8_t bit4_7 : 4;
    } bits;

    uint8_t value;

} rcd_task_st_t;


int main()
{
    rcd_task_st_t test1;
    rcd_task_st_t test2;

    test1.value = 0xa5; //10100101b
    printf("%d\n", test1.bits.bit0);
    printf("%d\n", test1.bits.bit1_2);
    printf("%d\n", test1.bits.bit3);
    printf("%d\n", test1.bits.bit4_7);
}


4:结果

yankaishi@zx-dev:~/test/bits$ ./a.out 
1
2
0
10

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值