我有一个uint8_t orig[ETH_ALEN];
我该如何使用__printf(3, 4)
来打印它?
__printf(3, 4)
的定义为#define __printf(a, b) __attribute__((format(printf, a, b)))
Orig应该是以太网硬件地址。
#include <inttypes.h>
printf("%" PRIu8 "\n", orig[0]);
__printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n",
orig[0] & 0xff, orig[1] & 0xff, orig[2] & 0xff,
orig[3] & 0xff, orig[4] & 0xff, orig[5] & 0xff);
& 0xff
是为了确保只发送8位到 printf()
;但对于无符号类型如 uint8_t
,这些可能是不需要的,所以你可以尝试不用它们。
这假设是一个常规的48位MAC,并使用传统的冒号分隔的十六进制样式进行打印。
uint8_t
保证只有8位,因此掩码是不必要的。但即使如此,由于 printf
是可变参数的,所以会发送超过8位的内容,因为它们都将被提升为 unsigned int
。 - dreamlaxuint8_t
的值都可以表示为 int
,因此整数提升[以及默认参数提升]将把 uint8_t
提升为 int
。 - Daniel Fischer
%u
适用于任何uintN_t
,我认为,至少适用于uint8_t
。 - rvighne