LARGE_INTEGER联合体QuadPart输出异常:为何仅显示LowPart?
问题分析:printf输出LARGE_INTEGER的QuadPart仅显示低32位的原因
这不是正常现象,问题出在你用错了printf的格式占位符。
%x是专门用来输出unsigned int(通常为32位)类型的格式符,而QuadPart的类型是unsigned long long(64位)。当你用%x输出64位变量时,printf只会读取该变量的低32位数据,所以最终只显示了和LowPart相同的内容。
要正确输出完整的64位无符号整数,需要使用对应unsigned long long类型的格式符%llx。修改后的printf代码如下:
printf("Low: %x, high: %x, quad: %llx\n", num1.u.LowPart, num1.u.HighPart, num1.QuadPart);
如果你是在Windows平台开发,也可以使用微软扩展的%I64x格式符,效果和%llx一致,但%llx是C标准规定的格式符,跨平台兼容性更好。
修改后运行代码,QuadPart会完整输出1020304050607080,而LowPart对应的值是50607080,HighPart对应的值是10203040,这也符合小端模式下联合体的内存布局逻辑。
内容的提问来源于stack exchange,提问作者kirill
相关产品推荐
相关产品推荐

