我需要打印ULONGLONG
值(unsigned __int64
)。我应该在printf
中使用什么格式?
我在另一个问题中找到%llu
,但他们说这只是针对linux的。
感谢您的帮助。
答案 0 :(得分:30)
使用Google搜索“Visual Studio printf unsigned __int64”会产生this page作为第一个结果,表示您可以使用前缀I64
,因此格式说明符为%I64u
答案 1 :(得分:9)
%llu
是打印unsigned long long
的标准方式,它不仅适用于Linux,它实际上是在C99中。所以问题实际上是使用兼容C99的编译器,即不是Visual Studio。
C99 7.19.6 格式化输入/输出功能
ll(ell-ell)指定以下d,i,o,u,x或X转换说明符适用于a long long int或unsigned long long int参数;或者后面的n转换说明符适用于沿long int参数的指针。
答案 2 :(得分:4)
我建议您使用标准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;
}
答案 3 :(得分:1)
Printf具有unsigned long long
的不同格式说明符,具体取决于编译器,我见过%llu
和%Lu
。一般来说,我会建议你使用std::cout
和类似的。
答案 4 :(得分:0)
这是HEX输出的解决方法
printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));