我正在编写一些软件,其中每个位必须精确(它是CPU的),所以__packed非常重要.
typedef union{
uint32_t raw;
struct{
unsigned int present:1;
unsigned int rw:1;
unsigned int user:1;
unsigned int dirty:1;
unsigned int free:7;
unsigned int frame:20;
} __packed;
}__packed page_union_t;
Run Code Online (Sandbox Code Playgroud)
那是我的结构和结合.但它不起作用:
page_union_t p; //.....
//This:
p.frame=trg_page;
p.user=user;
p.rw=rw;
p.present=present;
//and this:
p.raw=trg_page<<12 | user<<2 | rw<<1 | present;
Run Code Online (Sandbox Code Playgroud)
应该创建相同的uint32.但他们并没有创造同样的东西.
有什么我看不出我的工会有问题吗?