我正在编写一些软件,其中每一位都必须准确(它用于 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;
那是我的结构和联盟。但是它不起作用:
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;
应该创建相同的 uint32。但他们创造的不是同一个东西。
我的 union 有什么我看不到的问题吗?
最佳答案
你的结构只有 31 位
关于c - union 和结构打包问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/979050/