C++:如何从 WLAN_BSS_ENTRY 打印 dot11Bssid?

标签 c++ winapi

我在打印 (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/

相关文章:

c++ - 如何在 Win32 控制台中隐藏鼠标光标?

c++ - char = 0 在 c++ 中使用 XOR

winapi - 从 Visual C++ 播放 mp3 的最简单方法

c++ - 如何保证一个函数在一个线程内不返回就不会再次进入?

c++ - 在 Mac 上激活之前的进程

c++ - WinAPI:在按钮上显示图像 - 常用方法不起作用

python - 结合 Tkinter 和 win32ui 使 Python 在退出时崩溃

C++ 错误 : Free() invalid next size (fast)

c++ - 模板范式和显式警告

c++ - ubuntu 18.10 上的 std::filesystem 链接错误