C 打印uint8\t

C 打印uint8\t,c,debugging,C,Debugging,我有uint8原[ETH_ALEN] 如何使用\uu printf(3,4) 它被定义为#define uu printf(a,b)uu属性uu((格式(printf,a,b))) 原始地址应该是以太网硬件地址。您需要构造一个合适的格式字符串。printf()函数无法一次打印一个数组,因此需要将其拆分并打印每个uint8\t: __printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", orig[0] & 0xff, orig[1]

我有
uint8原[ETH_ALEN]

如何使用
\uu printf(3,4)

它被定义为
#define uu printf(a,b)uu属性uu((格式(printf,a,b)))


原始地址应该是以太网硬件地址。

您需要构造一个合适的格式字符串。
printf()
函数无法一次打印一个数组,因此需要将其拆分并打印每个
uint8\t

__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
用于确保只向
printf()发送8位
;像
uint8\u t
这样的无符号类型不需要它们,所以您也可以尝试不使用它们


这假定为常规的48位MAC,并使用冒号分隔的十六进制样式打印。

使用C99格式说明符:

#include <inttypes.h>

printf("%" PRIu8 "\n", orig[0]);
#包括
printf(“%”PRIu8“\n”,源[0]);

我认为,您缺少宏前面的“%”。在VC2013中,它的定义为%u
uint8\t
保证只有8位,因此不需要掩码。但是,即使这样,仍然会发送超过8位,因为
printf
是可变的,所以它们都将被提升为
unsigned int
@dreamlax。a
uint8\u t
的所有值都可以表示为
int
,因此整数提升[以及默认参数提升]将把
uint8\u t
提升到
int
@danielfisher:D'oh这就是我的意思。。。没有签名的
不知从何而来。我的意思是,由于整数提升,printf将被赋予超过8位。我认为,
%u
适用于任何
uintN\u t
,或者至少是
uint8\u t
。可能的