【问题标题】:Want a solution for printf [duplicate]想要 printf 的解决方案 [重复]
【发布时间】:2012-07-24 20:05:18
【问题描述】:

可能重复:
how to printf uint64_t?

我想在 C 中打印u_int64_t。 我想知道这个的格式说明符? 我是C用户,想做一个printf()

【问题讨论】:

  • how to printf uint64_t 完全相同。
  • 我想要它用于 u_int64_t。两者都一样吗?我的意思是 uint64_t 和 u_int64_t..?
  • 此问题与 uint64_t 问题并不完全相同。 u_int8_tu_int16_tu_int32_tu_int64_t 类型显示在 Linux 标头中:/usr/include/sys/types.h,并带有注释 But these were defined by ISO C without the first '_'

标签: c compiler-construction printf format-specifiers


【解决方案1】:
#include <inttypes.h>
#include <stdio.h>

uint64_t t = 42;
printf("%" PRIu64 "\n", t);

【讨论】:

  • 它是 u_int64_t。所以,我糊涂了。?他们的意思是一样的吗?
  • C 没有名为 u_int64_t 的标准 C 类型,但有一个名为 uint64_t 的可选类型。
  • 我在linux上工作,遇到了这个u_int64_t,我很困惑,所以,如果我按照你说的方式打印,会好吗..?
  • 它有效,哇。 'printf' 中的 'PRIu64' 是什么意思?
  • @aasa 它是一个宏,可扩展为具有所需转换说明符的字符串文字,例如 "lu""llu",具体取决于您的系统。
【解决方案2】:

您可以对 64 位整数使用 L 修饰符,例如:

u_in64_t number;
printf("%Lu", number);

【讨论】:

  • L 不是 C 标准转换说明符
  • 那么,最终的 printf 格式是什么?
  • 标准 C 没有自己的 64 位整数数据类型,但编译器可能支持 long long ...,可以进行类型定义。 long long ... 改用 ll 修饰符。但有些编译器也支持L 修饰符。
  • 标准 C 不保证 64 位整数数据类型,但如果平台有 64 位整数数据类型,则需要 C99 实现提供uint64_t(第 7.18.1.1 节)。 uint_least64_tuint_fast64_t 是必需的(第 7.18.1.2 和 7.18.1.3 节),并且有对应的 PRIu64/PRIuLEAST64/PRIuFAST64 宏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多