在 Windows 上未签名__int64的 printf 格式

printf format for unsigned __int64 on Windows

本文关键字:int64 printf 格式 Windows      更新时间:2023-10-16

我需要打印一个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 转换说明符适用于 长长整或无符号长长整 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));

对于像我这样一直忘记的人,
如果您使用 Visual Studio(具体来说,选择 MSVC 编译器(,

%I64u uint64_t == unsigned __int64 == unsigned long long

%I64d int64_t == __int64 == long long

%Iu for size_t (== 在 win64 中unsigned __int64,否则unsigned int (

您应该查看此 MSDN 以了解详细信息,或者仅检查此部分 :)
另外,如果有兴趣,其他MSDN喜欢这个和这个。

# C++ Windows 格式字符串 MSVC Visual Studio size_t int64_t uint64_t