打印uint8_t

Sae*_*eed 7 c debugging

我有 uint8_t orig[ETH_ALEN];

我该如何使用它进行打印 __printf(3, 4)

被定义为 #define __printf(a, b) __attribute__((format(printf, a, b)))

Orig应该是以太网硬件地址.

小智 15

使用C99格式说明符:

#include <inttypes.h>

printf("%" PRIu8 "\n", orig[0]);
Run Code Online (Sandbox Code Playgroud)

  • 我想,你在宏之前错过了"%". (3认同)

unw*_*ind 9

您需要构造一个合适的格式字符串.该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);
Run Code Online (Sandbox Code Playgroud)

& 0xff是确保onlu 8位被发送到printf(); 对于无符号类型,它们不应该被需要,uint8_t因为你可以不用它.

这假设是一个常规的48位MAC,并使用传统的冒号分隔十六进制样式进行打印.