c - union 和结构打包问题

标签 c struct unions packing

我正在编写一些软件,其中每一位都必须准确(它用于 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/

相关文章:

json - 如何在没有 rest API key 的情况下将结构转换为 json

c++ - union 内结构的重载类型转换运算符问题

c - C 中奇怪的计算问题乘以 1.2 失败

C 输入问题

c - C 中的内联 vector 运算

C 结构 - 字段类型不完整

float 和字节数组问题的 C++ union

c++ - 使用 union 写入位边界

c - 为什么返回带有字符串文字的 const char * 的函数有效?

java - Zlib Java 与 C 的基准测试