Windows上未签名的__int64的printf格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows上未签名的__int64的printf格式相关的知识,希望对你有一定的参考价值。

我需要打印一个ULONGLONG值(unsigned __int64)。我应该在printf中使用什么格式?我在另一个问题中找到了%llu,但他们说它仅适用于linux。

谢谢你的帮助。

答案

使用Google搜索“Visual Studio printf unsigned __int64”会产生this page作为第一个结果,它表示你可以使用前缀I64,因此格式说明符将是%I64u

另一答案

%llu是打印unsigned long long的标准方式,它不仅适用于Linux,它实际上是在C99中。所以问题实际上是使用兼容C99的编译器,即不是Visual Studio。

C99 7.19.6格式化输入/输出功能

ll(ell-ell)指定以下d,i,o,u,x或X转换说明符适用于long long int或unsigned long long int参数;或者后面的n转换说明符适用于沿long int参数的指针。

另一答案

我建议您使用标准C库中指定的PRIu64格式。它旨在为用户提供跨不同体系结构的无符号64位整数的格式说明符。

这是一个例子(在C中,而不是C ++):

#include <stdint.h>   /* For uint64_t */
#include <inttypes.h> /* For PRIu64 */
#include <stdio.h>    /* For printf */
#include <stdlib.h>   /* For exit status */

int main()
{
    uint64_t n = 1986;
    printf("And the winning number is.... %" PRIu64 "!
", n);
    return EXIT_SUCCESS;
}
另一答案

根据编译器的不同,Printf有不同的unsigned long long格式说明符,我见过%llu%Lu。一般来说,我会建议你使用std::cout和类似的。

另一答案

这是HEX输出的解决方法

printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));

以上是关于Windows上未签名的__int64的printf格式的主要内容,如果未能解决你的问题,请参考以下文章

获得精确时间到微秒

FFmpeg入门详解之71:获取ffmpeg转码的实时进度

自动化测试第八节---base64zip方法异常处理接口签名网络编程

链接上未定义的符号 ___gxx_personality_v0

对自己编译的文件(exe/dll)进行签名的实践(Windows)

64位驱动开发及驱动签名