是否有一种将结构转换为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