在 Windows 上未签名__int64的 printf 格式
printf format for unsigned __int64 on Windows
我需要打印一个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
- 从不同线程使用int64的不同字节安全吗
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 内联程序集printf将整数解释为地址
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- C++ Setter/Getter,cout 工作,printf 失败
- Printf 命令不打印时添加了查找常见除数的新代码
- SIGSEGV, 分段错误. 而 printf() 数组索引的值
- 为什么在包含iostream时可以使用printf()?
- 创建具有验证和语法突出显示的自定义 printf
- 0x%08lx 格式说明符在 printf 语句到 cout
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- C printf 无法从终端按预期工作
- Printf 和 Echo 提供不同的输出
- C++ - scanf() 和 printf() 执行顺序不对
- cout 打印不准确的结果,printf 打印准确的结果
- 了解 printf 格式规范中的 %03.3u
- redefine printf(), sprintf(), etc. arm-none-eabi toolchain
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- C++, printf vs cout performance
- printf 数据类型说明符复杂问题