为什么<inttypes.h>&#39; PRIx16不等于&#34; hx&#34;?

时间:2017-10-23 23:50:24

标签: c printf

为什么PRIx16 == "x" in C(和in C++)在GCC下?

我希望它是"hx",以便以下工作:

#include <inttypes.h>

int16_t v = -1;
printf("%04" PRIx16 "\n", v);  // prints ffffffff, not ffff

1 个答案:

答案 0 :(得分:0)

简短回答:

要打印已签名的类型,请使用di

要打印未签名的类型,请使用xuo

int16_t v有符号整数类型。

PRIxN中的

PRIx16被列为“无符号整数的fprintf宏”。 {“1}}未列出”有符号整数的fprintf宏“。 @Kerrek SB

要以十进制文字形式打印PRIxN,请使用vPRId16

PRIi16

要将printf("%04" PRId16 "\n", v); 打印为十六进制文本,请转换/转换为某些无符号文本。

v

对于printf("%04" PRIx16 "\n", (uint16_t)v); 我也期望"hx",这就是我的GCC编译方式(GNU C11(GCC)版本6.4.0),但这更可能是standard library version问题(我的:ldd(cygwin)2.9.0)。我对OP编译器/库的最新版本有所怀疑。

PRIx16

输出

#include <stdio.h>
#include <inttypes.h>

int main(void) {
  printf(PRIx16);
  return 0;
}