为什么PRIx16 == "x"
in C(和in C++)在GCC下?
我希望它是"hx"
,以便以下工作:
#include <inttypes.h>
int16_t v = -1;
printf("%04" PRIx16 "\n", v); // prints ffffffff, not ffff
答案 0 :(得分:0)
简短回答:
要打印已签名的类型,请使用d
,i
。
要打印未签名的类型,请使用x
,u
,o
。
int16_t v
是有符号整数类型。
PRIxN
中的 PRIx16
被列为“无符号整数的fprintf宏”。 {“1}}未列出”有符号整数的fprintf宏“。 @Kerrek SB
要以十进制文字形式打印PRIxN
,请使用v
或PRId16
。
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;
}