union {
__int64 bigint;
struct {
unsigned long low;
long high;
};
} offbytes;
我不确定上面代码的含义是什么?
__ int64,unsigned long,long都是8个字节。
答案 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 long
和long
并不总是8个字节。许多编译器提供4字节long
整数。我打赌你的例子就是这种情况。
在这种情况下,您可以像这样使用联合:
offbytes a;
a.bigint = 0x0123456789abcdef;
printf("%x %x\n", a.high, a.low);
结果是:
1234567 89abcdef
警告:由于大/小端的考虑,此代码不可移植。