C语言 Windows上无符号__int64的printf格式

nszi6y05  于 2023-02-03  发布在  Windows
关注(0)|答案(6)|浏览(353)

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

sdnqo3pr

sdnqo3pr1#

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

x3naxklr

x3naxklr2#

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

icomxhvb

icomxhvb3#

我建议您使用从标准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;
}
nzk0hqpo

nzk0hqpo4#

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

l5tcr1uw

l5tcr1uw5#

以下是HEX输出的变通方法

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

yqlxgs2m6#

对于像我这样总是健忘的人来说,
如果使用Visual Studio(MSVC),
%I64u用于uint64_t(无符号__int64)
%I64d对应于int64_t(__int64)
%Iu用于size_t
您应该查看此MSDN以了解详细信息,或者只查看此部分:)

相关问题