<inttypes.h> </inttypes.h>的好介绍

时间:2011-06-09 21:09:50

标签: c printf c99

我建议对使用混合32/64位版本的<inttypes.h>的人使用printf。我尝试了Google的介绍或教程页面,其中包含一些示例和使用指南,但我找不到一个。

有人可以推荐<inttypes.h>的介绍或教程吗?

4 个答案:

答案 0 :(得分:42)

首先尝试http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html

avr-libc中找到了如何使用新的可移植格式化宏的更好示例。我已经包含了一个例子(来自链接)来说明。 QNX libraries也有一个更好的人类可读的描述(如果你不喜欢阅读规范冷),虽然你必须滚动几乎到页面的末尾,以获得描述的内容。

#include <inttypes.h>

uint8_t smallval;
int32_t longval;
...
printf("The hexadecimal value of smallval is %" PRIx8
       ", the decimal value of longval is %" PRId32 ".\n",
       smallval, longval);

请注意,这使用“String”“String”隐含连接运算符来生成字符串(在此示例中)

"The hexadecimal value of smallval is %x, the decimal value of longval is %ld.\n"

尝试分解命名约定似乎表明:

  • (前三个字母)
    • printf格式的PRI
    • SCN for scanf format
  • (第四个字母)
    • x表示十六进制格式
    • u表示无符号格式
    • o用于八进制格式化
    • 我用于整数格式化
    • d表示十进制格式
  • (额外的字母)
    • 8 for 8 bit
    • 16 for 16 bit
    • 32 for 32 bit
    • 64 for 64 bit
    • FAST8表示“快速”8位
    • FAST16表示“快速”十六位
    • FAST32为“快”三十二位
    • FAST64表示“快速”六十四位
    • LEAST8表示“最少”八位
    • LEAST16表示“最少”十六位
    • LEAST32为“至少”三十二位
    • LEAST64为“最少”六十四位
    • 指针的PTR
    • MAX表示支持的最大位数

所以PRIx8表示printf格式指令格式化为十六进制8位。

答案 1 :(得分:7)

我总是按照标准(PDF link)来做这些事情;一旦你弄清楚它们所设置的模式,它们就不会太复杂。相关部分是§7.8整数类型的格式转换<inttypes.h>

答案 2 :(得分:2)

HP在编写可移植代码方面有很好的参考,他们为使用inttypes.h提供了一些具体建议

Writing Portable Code

答案 3 :(得分:1)

我总是从维基百科开始查找标题。 <inttypes.h>似乎在维基百科上存在很大问题。接下来我要采取的步骤是this site。此前一个站点列出了每个宏,并举例说明。您还可以查看this site,它实际上显示了头文件。我不认为其中任何一个都是真正的教程,但它们是一个很好的跳跃点。