u8 bit0 :1; “:”位字段的声明(也称为位段)

在C语言中,冒号(:)用于声明bit字段,也称为位域(Bit-field)。位域允许我们在结构体中对结构成员进行位级的精确操作,主要用于对寄存器和硬件操作进行描述和访问。冒号后面的数字表示该位域的位宽度。
在通信中,数据的传输往往需要进行数据的<打包>和<解包>。位域可以用于将多个字段打包成一个数据结构,便于进行传输。例如,一个字节中包含多个开关状态,可以使用位域将每个开关状态的位进行定义,然后将它们打包到一个字节中进行传输。

在解析接收到的数据时,位域也可以用于对数据进行解包和提取。通过定义相应的位域结构,可以很方便地从接收到的数据中提取和操作各个字段的值。

#include 
#include 

typedef uint8_t  u8;
typedef uint16_t u16;

typedef union {
    struct {
        u8 bit0 :1;
        u8 bit1 :1;
        u8 bit2 :1;
        u8 bit3 :1;
        u8 bit4_4 :4;
        u8 bit5_8 :8;
    } bits;
    u16 bytes;
} bit_byte;

int main() {
    bit_byte my_union;
    my_union.bytes = 0xFFFF;  // 设置所有的位为1

    // 打印每个独立的位
    printf("Bit 0: %u\n", my_union.bits.bit0);
    printf("Bit 1: %u\n", my_union.bits.bit4_4);
    // ... 打印出其他位
    printf("Bit 15: %u\n", my_union.bits.bit5_8);

    // 打印整个字节
    printf("Bytes: %u\n", my_union.bytes);

    return 0;
}

在这里插入图片描述

你可能感兴趣的:(C)