问题描述
为什么 PRIx16 == "x"
在 C 中(和 在 C++ 中)在 GCC 下?
Why is PRIx16 == "x"
in C (and in C++) under GCC?
我希望它是 "hx"
,以便以下工作:
I would expect it to be "hx"
, so that the following works:
#include <inttypes.h>
int16_t v = -1;
printf("%04" PRIx16 "\n", v); // prints ffffffff, not ffff
推荐答案
简答:
要打印签名类型,请使用 d
、i
.
To print signed types use d
, i
.
要打印无符号类型,请使用 x
、u
、o
.
To print unsigned types, use x
, u
, o
.
int16_t v
是一个有符号整数类型.
PRIxN
和 PRIx16
一样被列为用于无符号整数的 fprintf 宏".PRIxN
未针对带符号整数的 fprintf 宏"列出.@Kerrek SB
PRIxN
as in PRIx16
is listed as a "fprintf macros for unsigned integers". PRIxN
is not listed for "fprintf macros for signed integers". @Kerrek SB
要将 v
打印为十进制文本,请使用 PRId16
或 PRIi16
.
To print v
, as decimal text, use PRId16
or PRIi16
.
printf("%04" PRId16 "\n", v);
要将 v
打印为十六进制文本,请强制转换/转换为一些未签名的文本.
To print v
as a hexadecimal text, cast/convert to some unsigned.
printf("%04" PRIx16 "\n", (uint16_t)v);
我也希望 "hx"
用于 PRIx16
,这就是我的 GCC 编译(GNU C11 (GCC) 6.4.0 版)的方式,但这更多可能是 标准库版本 问题(我的:ldd (cygwin) 2.9.0).我对 OP 编译器/库的最新性有疑问.
I also would expect "hx"
for PRIx16
and that is the way with my GCC compilation (GNU C11 (GCC) version 6.4.0) yet this is more likely a standard library version issue (mine: ldd (cygwin) 2.9.0). I have doubts about the up-to-date-ness of OP's compiler/library.
#include <stdio.h>
#include <inttypes.h>
int main(void) {
printf(PRIx16);
return 0;
}
输出
hx
这篇关于为什么<inttypes.h>的PRIx16不等于“hx"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!