在Windows上使用unsigned __int64的printf格式

我需要打印一个ULONGLONG值( unsigned __int64 )。 我应该在printf使用什么格式? 我发现%llu在另一个问题,但他们说这只是Linux。

谢谢你的帮助。

使用Google搜索“Visual Studio printf unsigned __int64”生成此页面作为第一个结果,说明可以使用前缀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", n); return EXIT_SUCCESS; } 

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

这是一个解决十六进制输出

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