将struct转换为int

GoT*_*imw 8 c struct casting

是否有一种将结构转换为uint64_t或任何其他int的简洁方法,假设<= to sizeof int中的结构?我唯一能想到的只是一个'好'的解决方案 - 使用工会.但是我从来都不喜欢他们.

让我添加一个代码片段来澄清:

typedef struct {
uint8_t field: 5;
uint8_t field2: 4;
/* and so on... */
}some_struct_t;

some_struct_t some_struct;
//init struct here

uint32_t register;
Run Code Online (Sandbox Code Playgroud)

现在我如何转换some_struct来捕获uint32_t寄存器中的位顺序.

希望能让它更清晰一些.

Ale*_*rtt 16

我刚刚遇到同样的问题,我用这样的联盟解决了它:

typedef union {
    struct {
        uint8_t field: 5;
        uint8_t field2: 4;
        /* and so on... */
    } fields;
    uint32_t bits;
} some_struct_t;

/* cast from uint32_t x */
some_struct_t mystruct = { .bits = x };

/* cast to uint32_t */
uint32_t x = mystruct.bits;
Run Code Online (Sandbox Code Playgroud)

HTH,Alex