28

我需要使用 printf() 来打印一个 uint16_t。这个 SO 答案(如何打印 uint32_t 和 uint16_t 变量值?)说我需要使用 inttypes.h。

但是,我正在研究嵌入式系统,并且 inttypes.h 不可用。当 uint16_t 的格式说明符不可用时,如何打印 uint16_t?

4

3 回答 3

38

您应该使用 inttypes.h 的样式,但要自己定义符号。例如:

#define PRIu8 "hu"
#define PRId8 "hd"
#define PRIx8 "hx"
#define PRIu16 "hu"
#define PRId16 "hd"
#define PRIx16 "hx"
#define PRIu32 "u"
#define PRId32 "d"
#define PRIx32 "x"
#define PRIu64 "llu" // or possibly "lu"
#define PRId64 "lld" // or possibly "ld"
#define PRIx64 "llx" // or possibly "lx"

为您的机器找出它们并使用它们。看看 inttypes.h 中的其他内容,并找出您需要的内容。

这样,您的代码将更具可移植性。自 70 年代后期以来,我一直在从事嵌入式系统工作。相信我:便携性很重要。

于 2018-06-15T21:16:22.870 回答
17

一个明显的方法是:

printf("%u\n", (unsigned int)x);

unsigned int 保证至少为 16 位,因此这不是有损转换。

于 2015-03-18T01:55:11.127 回答
9

short int是最小的,至少 16 位长,因此将值转换为unsigned short int并使用%hu.

于 2015-03-18T01:55:23.073 回答