我在打印 (printf) dot11Bssid(DOT11_MAC_ADDRESS 类型)时遇到问题。该地址包含在 WLAN_BSS_ENTRY 中,它包含在从 WlanGetNetworkBssList 返回的集合中。
当我尝试打印它时,它看起来只是一个增量计数,而不是 BSSID 的实际值 - 但我不明白为什么。其他所有内容都按其应有的方式打印。
if (WlanGetNetworkBssList(hWlan, &guidInterface, NULL, dot11_BSS_type_infrastructure, NULL, NULL, ppWlanBssList) == ERROR_SUCCESS)
{
// De-reference seems to be required here to access the object returned from the call.
PWLAN_BSS_LIST pWLanBssList = (*ppWlanBssList);
for (unsigned int t = 0; t < pWLanBssList->dwNumberOfItems; t++)
{
printf("\nSSID: %s\t", pWLanBssList->wlanBssEntries[t].dot11Ssid.ucSSID);
printf("\tBSSID: %x:%x:%x:%x:%x:%x\t", pWLanBssList->wlanBssEntries[t].dot11Bssid);
printf("\tSignal Strength: %d dbm", pWLanBssList->wlanBssEntries[t].lRssi);
}
}
这是输出:
SSID: [REDACTED] BSSID: 1ef7d580:fffffd7f:c12cdd50:0:0:c12ce248 Signal Strength: -60 dbm
SSID: [REDACTED] BSSID: 1ef7d6e8:fffffd7f:c12cdd50:0:0:c12ce248 Signal Strength: -80 dbm
SSID: [REDACTED] BSSID: 1ef7d850:fffffd7f:c12cdd50:0:0:c12ce248 Signal Strength: -79 dbm
SSID: [REDACTED] BSSID: 1ef7d9b8:fffffd7f:c12cdd50:0:0:c12ce248 Signal Strength: -85 dbm
SSID: [REDACTED] BSSID: 1ef7db20:fffffd7f:c12cdd50:0:0:c12ce248 Signal Strength: -94 dbm
此外,看起来字节是颠倒的(通过后面的字符始终相同来判断 - 尽管它们应该都不同),但考虑到第一组看起来像是增量计数,我显然不能相信任何无论如何,数据。
关于我在这里做错了什么有什么想法吗?我是否必须打印每个 UCHAR,按字符位置索引(例如:dot11Bssid[0])而不是一次打印整个对象?
最佳答案
是的,单独打印 BSSID 的每个字节(与 MAC 地址格式相同),并在必要时用前导 0 填充。
printf("MAC address of BSS: ");
sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x",
pWlanBssEntry->dot11Bssid[0],
pWlanBssEntry->dot11Bssid[1],
pWlanBssEntry->dot11Bssid[2],
pWlanBssEntry->dot11Bssid[3],
pWlanBssEntry->dot11Bssid[4],
pWlanBssEntry->dot11Bssid[5]);
printf(" %s\n", mac);
来自 https://github.com/Shouqun/geolocation/blob/master/src/geolocation_win.c
关于C++:如何从 WLAN_BSS_ENTRY 打印 dot11Bssid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53443799/