【问题标题】:Print sockaddr ap_addr (network's MAC address) in readable format以可读格式打印 sockaddr ap_addr(网络的 MAC 地址)
【发布时间】:2026-01-16 04:10:02
【问题描述】:

我在无线路由器上运行这个命令:

#: iwlist wlan00 scanning
wlan0    Scan completed :
          Cell 01 - Address: 16:76:02:7D:A5:25
          .....

那么上面提到的“地址”就是检测到的接入点的MAC地址?

我查看了 iwlib.h 并且 ap_addr 的类型是 sockaddr

当我第一次尝试将其打印为 %d 时,它给了我一个类似于 71654 的输出,所以我认为它的格式可能不正确。

我还尝试使用此答案作为指南打印信息:https://*.com/a/11684101/1306468

但我收到了这个错误:

error: 'sockaddr' has no member named 'sa_len'

为了您的信息,我也尝试过 printf("%d\n", result->ap_addr.sa_family); 在所有检测到的接入点中给了我 1 作为输出。

任何人知道如何打印出这个值,使其与 iwlist wlan0 扫描地址的格式相同?

非常感谢。

【问题讨论】:

标签: c linux


【解决方案1】:

我发现的代码看起来更像这样:

printf ("Target hardware (MAC) address: ");
for (i=0; i<5; i++) {
  printf ("%02x:", arpheader->target_mac[i]);
}

【讨论】:

    【解决方案2】:

    'fff...' 是因为设置了最高位,它被解释为符号位并扩展为填充 unsigned int。 (注意 f 出现在 9D、FE 和 D0 上,它们都设置了 80 位)

    您的解决方案有效,或者将参数转换为 unsigned char 也应该有效。

    【讨论】:

      最近更新 更多