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