下面的MicroPython代码运行在ESP32上:
import network
wlan_sta = network.WLAN(network.STA_IF)
wlan_sta.active(True)
wlan_mac = wlan_sta.config('mac')
print("MAC Address:", wlan_mac) # Show MAC for peering
输出如下所示:
MAC Address: b'0\xae\xa4z\xa7$'
我想以更熟悉的六对十六进制数字的格式显示它,如下所示:
MAC Address: AABBCC112233
在互联网上寻找解决方案之后,我尝试了:
print("MAC Address:", str(wlan_mac))
,但它的显示方式与不使用str()时相同
print("MAC Address:", hex(wlan_mac))
,但它导致TypeError:无法将字节转换为int
print("MAC Address:", wlan_mac.hex())
,但它说AttributeError:‘字节’对象没有属性‘十六进制’
我对从wlan_sta.config('mac')
中检索到的字节也有一点怀疑。我希望看到的是更像b'\xaa\xbb\xcc\x11\x22\x33'
而不是b'0\xae\xa4z\xa7$'
的东西。对于应该是十六进制的东西,z和$看起来很不合适,对于应该是六位数的数字来说,它似乎太短了。
所以我的问题有两方面:
发布于 2022-04-17 15:02:21
我对从wlan_sta.config('mac')检索的字节也有点怀疑。我希望看到的东西更像是b‘\xaa\xcc\xcc\x11\x22\x33’,而不是b‘0\xae\xa4z\xae 7$’。对于应该是十六进制的东西,z和$看起来很不合适,对于应该是六位数的数字来说,它似乎太短了。
你不会得到一个十六进制字符串,你会得到一个字节字符串。因此,如果MAC地址包含值7A
,那么字节字符串将包含z
(它具有ASCII值122 (十六进制7A
))。
我是用正确的方法来获得MAC地址吗?
你才是!
如果它是正确的,我如何将它格式化为六对十六进制数字?
如果要将MAC地址打印为十六进制字符串,可以使用ubinascii.hexlify
方法:
>>> import ubinascii
>>> import network
>>> wlan_sta = network.WLAN(network.STA_IF)
>>> wlan_sta.active(True)
>>> wlan_mac = wlan_sta.config('mac')
>>> print(ubinascii.hexlify(wlan_mac).decode())
30aea47aa724
或者也许:
>>> print(ubinascii.hexlify(wlan_mac).decode().upper())
30AEA47AA724
https://stackoverflow.com/questions/71902740
复制相似问题