【发布时间】:2011-02-10 16:20:42
【问题描述】:
我有 6 字节字符串中的 mac 地址。您将如何以“人类”可读的格式打印它?
谢谢
【问题讨论】:
-
或许为了让其更具可读性,您实际上可以查找制造商。
我有 6 字节字符串中的 mac 地址。您将如何以“人类”可读的格式打印它?
谢谢
【问题讨论】:
import struct
"%x:%x:%x:%x:%x:%x" % struct.unpack("BBBBBB",your_variable_with_mac)
【讨论】:
%02x 而不是%x。否则,对于 16 以下的字节,前面的 0 会丢失。
没有必要使用struct:
def prettify(mac_string):
return ':'.join('%02x' % ord(b) for b in mac_string)
虽然如果mac_string 是bytearray(或Python 3 中的bytes),考虑到数据的性质,这是比字符串更自然的选择,那么您也不需要ord功能。
示例用法:
>>> prettify(b'5e\x21\x00r3')
'35:65:21:00:72:33'
【讨论】:
b.encode('hex') 比'%02x' % ord(b) 更易读,但效果是一样的。
在Python 3.8 及以上版本中,您可以只使用bytes.hex。
b'\x85n:\xfaGk'.hex(":") // -> '85:6e:3a:fa:47:6b'
【讨论】:
试试,
for b in addr:
print("%02x:" % (b))
addr 是你的字节数组。
【讨论】:
s=b'\x04NZ\xdf\x7f\xab'
1) 导入结构 ssid_2 = "%02x:%02x:%02x:%02x:%02x:%02x" % struct.unpack("BBBBBB", s)
或
2) ':'.join(f'{x:02x}' for x in s)
但是 1) 比 2) 快得多
【讨论】:
通常的十六进制格式不够人类可读吗? (see this 一种将字节转换为十六进制的方法)
de:ad:be:ef:ca:fe
顺便说一句,这是 MAC 地址在大多数软件中的显示方式(只是 Windows 使用破折号而不是冒号)。
【讨论】: