问一个关于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
请问如何可以得到我希望的结果,这又是为什么呢?
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哦