设置从结构到值的位组

时间:2014-05-10 17:11:24

标签: c struct bits

假设我有这种结构:

typedef struct {
    char x1 : 1;
    char x2 : 1;
    char x3 : 1;
    char x4 : 1;
    char x5 : 1;
    char x6 : 1;
    char x7 : 1;
    char x8 : 1;
    unsigned int an_int;

} my_struct;

我想修改由x3x4x5x6位构成的组,以便在015之间进行修改,值从stdin读取(其余值为0)。

我该怎么做?

(例如,int main()我有my_struct x_struct,我想要修改x3x4x5x6它)。 有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

#include <assert.h>
#include <stdlib.h>

typedef struct {
    char x1 : 1;
    char x2 : 1;
    char x3 : 1;
    char x4 : 1;
    char x5 : 1;
    char x6 : 1;
    char x7 : 1;
    char x8 : 1;
    unsigned int an_int;
} my_struct;


int main(int argc, const char* argv[])
{
    int input_value;
    my_struct x_struct;

    assert(argc == 2);
    input_value = strtol(argv[1], NULL, 10);
    assert(0 <= input_value && input_value < 16);

    x_struct.x3 = (input_value >> 0) & 0x01;
    x_struct.x4 = (input_value >> 1) & 0x01;
    x_struct.x5 = (input_value >> 2) & 0x01;
    x_struct.x6 = (input_value >> 3) & 0x01;

    return 0;
}