解释与未命名结构联合的理论[已经关闭]

时间:2014-10-09 09:26:28

标签: c linux

union {
    __int64 bigint;
    struct {
        unsigned long low;
        long high;
    };
} offbytes;

我不确定上面代码的含义是什么?

__ int64,unsigned long,long都是8个字节。

2 个答案:

答案 0 :(得分:1)

您可以通过两种方式访问​​offbytes:

offbytes.bigint = 0xFFFFFF;
printf("%ld %ld\n", offbytes.low, offbytes.high);

联合的大小是16个字节(它是它的较大组件的大小)。

如果你在offbytes.bigint中写入/读取,你将一次写入/读取所有16个字节。 如果你在offbytes.high或offbytes.low中写/读,你将拥有较低的8字节或较高的8字节。

答案 1 :(得分:1)

unsigned longlong并不总是8个字节。许多编译器提供4字节long整数。我打赌你的例子就是这种情况。

在这种情况下,您可以像这样使用联合:

offbytes a;
a.bigint = 0x0123456789abcdef;
printf("%x %x\n", a.high, a.low);

结果是:

1234567  89abcdef

警告:由于大/小端的考虑,此代码不可移植。