28

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

谢谢你的帮助。

4

5 回答 5

46

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

于 2013-08-07T15:30:12.853 回答
12

%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 参数的指针。

于 2013-08-07T15:32:43.793 回答
6

我建议您使用PRIu64标准 C 库中指定的格式。它旨在为用户提供跨不同架构的无符号 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;
}
于 2013-08-07T15:36:19.097 回答
1

Printf 有不同的格式说明符,unsigned long long具体取决于编译器,我已经看到%llu%Lu. 一般来说,我会建议你改用std::cout和类似的。

于 2013-08-07T15:29:10.083 回答
0

这是 HEX 输出的解决方法

printf("%08X%08X", static_cast<UINT32>((u64>>32)&0xFFFFFFFF), static_cast<UINT32>(u64)&0xFFFFFFFF));
于 2013-08-07T15:38:14.620 回答