本文介绍了为什么<inttypes.h>的PRIx16不等于“hx"?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么 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

推荐答案

简答:

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

To print signed types use d, i.

要打印无符号类型,请使用 xuo.

To print unsigned types, use x, u, o.

int16_t v 是一个有符号整数类型.

PRIxNPRIx16 一样被列为用于无符号整数的 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 打印为十进制文本,请使用 PRId16PRIi16.

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

这篇关于为什么&lt;inttypes.h&gt;的PRIx16不等于“hx"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 11:26