定义可以访问位,半字节,字节的联合

时间:2013-11-15 16:05:45

标签: c unions

union bits {
   unsigned int a : 1;
    unsigned int b : 2;
    unsigned int c : 3;
    unsigned int d : 4;``
    unsigned char x[2];
    unsigned int z; 
};

假设在32位的并集中, 我需要使用单个位,或一组位,或半字节或字节。有没有办法来定义联盟。

2 个答案:

答案 0 :(得分:4)

你需要一个位域联合。如果您只使用联合,则所有字段都将指向同一位置。

union{
    struct {
        unsigned int bit1 : 1;
        unsigned int bit2 : 1;
        unsigned int bit3 : 1;
        unsigned int bit4 : 1;
        unsigned int bit5 : 1;
        unsigned int bit6 : 1;
        unsigned int bit7 : 1;
        unsigned int bit8 : 1;
        ...
        unsigned int bit32 : 1;
    };
    struct {
        unsigned int nibble1 : 4;
        unsigned int nibble2 : 4;
        ...
    };
    struct {
        unsigned int byte1 : 8;
        unsigned int byte2 : 8;
        ...
    };
    unsigned int int_value;
}

答案 1 :(得分:0)

您可以在结构中使用位域,如下所示:

typedef union
{
  struct
  {
    unsigned char bit0 : 1;
    unsigned char bit1 : 1;
    unsigned char bit2 : 1;
    unsigned char bit3 : 1;
    unsigned char bit4 : 1;
    unsigned char bit5 : 1;
    unsigned char bit6 : 1;
    unsigned char bit7 : 1;
  }bits;
  unsigned char byte;
}byte;

然后如果您有byte b;,则可以访问每个位:b.bits.bit1

相关问题