d,lx,ld,lu //这几个都是输出32位的
hd,hx,hu //这几个都是输出16位数据的,
hhd,hhx,hhu //这几个都是输出8位的,
lld,ll,llu,llx //这几个都是输出64位的
%hu //代表以 unsigned short格式输出整数
%hx //代表以16进制的 输出short类型的整数
#define X8_F "hhx"
#define U16_F "hu"
#define S16_F "hd"
#define X16_F "hx"
#define U32_F "lu"
#define S32_F "ld"
#define X32_F "lx"
#define SZT_F "uz"
d,lx,ld,,lu,这几个都是输出32位的
hd,hx,hu,这几个都是输出16位数据的,
hhd,hhx,hhu,这几个都是输出8位的,
lld,llu,llx,这几个都是输出64位的,
LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE,
("ethernet_input: dest:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", src:%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F":%"X8_F", type:%"X16_F"\n",
(unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2],
(unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5],
(unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2],
(unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5],
(unsigned)htons(ethhdr->type)));
int printf(const char *format,[argument]);
format 参数输出的格式,定义格式为:%[flags][width][.perc][F|N|h|l]type
也就是有5类,1.flage 对齐 ,如右对齐。
2.width 显示数值的宽度
3.perc 小数点后面的位数
4.指针是否是远指针或整数是否是长整数
5.type ,必备的,含义如下:
d 有符号10进制整数
i 有符号10进制整数
o 无符号8进制整数
u 无符号10进制整数…… 等。
%后h已经代表了短整形数据,为什么还要加d才可以正常显示?
因为:其中第5类是必备的,其他4个是可选的。而h不是第5类的(第4),故需要后面带一个第5类的d或其他。
printf("MaxUnsShortint = %hu\n",MaxUnsShortint);中%hu 是4和5,表示非负短整型数据。
由于u和d都在第5类中,故有其中一个就可以了。