python从6字节字符串中打印mac地址

python从6字节字符串中打印mac地址,python,printing,tcp,Python,Printing,Tcp,我有6字节字符串的mac地址。您将如何以“人类”可读的格式打印它 谢谢通常的十六进制格式是否不够可读?(用于将字节转换为十六进制的方法) 顺便说一句,这是大多数软件显示MAC地址的方式(只是Windows使用破折号而不是冒号)。试试看 for b in addr: print("%02x:" % (b)) 其中addr是字节数组。无需使用struct: import struct "%x:%x:%x:%x:%x:%x" % struct.unpack("BBBBBB",your_var

我有6字节字符串的mac地址。您将如何以“人类”可读的格式打印它


谢谢

通常的十六进制格式是否不够可读?(用于将字节转换为十六进制的方法)

顺便说一句,这是大多数软件显示MAC地址的方式(只是Windows使用破折号而不是冒号)。

试试看

for b in addr:
    print("%02x:" % (b))

其中addr是字节数组。

无需使用
struct

import struct
"%x:%x:%x:%x:%x:%x" % struct.unpack("BBBBBB",your_variable_with_mac)
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'

s=b'\x04NZ\xdf\x7f\xab'

(一) 导入结构 ssid_2=“%02x:%02x:%02x:%02x:%02x:%02x”%struct.unpack(“BBBBBB”,s)

(二) “:”.join(s中x的f“{x:02x}”)

但是在Python3.8及更高版本中,1)要比2)快得多


也许为了使它更具可读性,您可以实际查找制造商。我发现
b.encode('hex')
'%02x'%ord(b)
可读性稍高,但效果相同。您可能应该使用
%02x
而不是
%x
。否则,16以下的字节缺少前面的0。
>>> prettify(b'5e\x21\x00r3')
'35:65:21:00:72:33'
b'\x85n:\xfaGk'.hex(":") // -> '85:6e:3a:fa:47:6b'