gpt4 book ai didi

c - hh 和 h 格式说明符需要什么?

转载 作者:太空狗 更新时间:2023-10-29 17:07:42 27 4
gpt4 key购买 nike

在下面的代码中,mac_str 是一个字符指针mac 是一个uint8_t 数组:

 sscanf(mac_str,"%x:%x:%x:%x:%x:%x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);

当我尝试上面的代码时,它给了我一个警告:

warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 8 has type ‘uint8_t *’ [-Wformat]

但我在他们指定的一些代码中看到了

sscanf(str,"%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);

它没有给出任何警告,但两者的工作原理相同。

使用 hhx 而不仅仅是 x 有什么必要?

最佳答案

&mac[0] 是指向unsigned char 的指针。1 %hhx 表示相应的参数指向一个 unsigned char。对方孔使用方钉:格式字符串中的转换说明符必须与参数类型匹配。


1 实际上,&mac[0]是一个指向uint8_t的指针,而%hhx仍然是uint8_t 错误。它在许多实现中“有效”,因为 uint8_t 在许多实现中与 unsigned char 相同。但正确的格式是 "%"SCNx8,如:

#include <inttypes.h>

scanf(mac_str, "%" SCNx8 "… rest of format string", &mac[0], … rest of arguments);

关于c - hh 和 h 格式说明符需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com