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