问一个关于union的问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 01:22:03
typedef unsigned __int64 QWORD;
typedef union _PAY
{
QWORD a;
DWORD b;
WORD c;
BYTE d;
}PAY;
void main()
{
PAY p = { 0x1122334455667788 };
printf("%x, %x, %x, %x\n", p.a, p.b, p.c, p.d);
}
输出结果:
55667788, 11223344, 55667788, 7788

事实上我希望的结果是:
1122334455667788, 55667788, 7788, 88

请问如何可以得到我希望的结果,这又是为什么呢?

__int64 应该用%llx格式化,你用%x的话printf是按dword来格式化p.a的,所以参数指针只移动了4个字节,而不是8字节:

#include <stdio.h>

typedef unsigned long long qword;
typedef unsigned dword;
typedef unsigned short word;
typedef unsigned char byte;

union
{
qword q;
dword d;
word w;
byte b;
}x;

int main()
{
x.q = 0x1122334455667788;

printf("%llx %x %x %x", x.q, x.d, x.w, x.b);

return 0;
}

printf("%x, %x, %x, %x\n", p.a, p.b, p.c, p.d);

应该改为:

printf("%I64x, %x, %x, %x\n", p.a, p.b, p.c, p.d);

是IJK的I而不是L哦