【问题标题】:Python. Print mac address out of 6 byte stringPython。从 6 字节字符串中打印出 mac 地址
【发布时间】:2011-02-10 16:20:42
【问题描述】:

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

谢谢

【问题讨论】:

  • 或许为了让其更具可读性,您实际上可以查找制造商。

标签: python printing tcp


【解决方案1】:
import struct
"%x:%x:%x:%x:%x:%x" % struct.unpack("BBBBBB",your_variable_with_mac)

【讨论】:

  • 您应该使用%02x 而不是%x。否则,对于 16 以下的字节,前面的 0 会丢失。
【解决方案2】:

没有必要使用struct

def prettify(mac_string):
    return ':'.join('%02x' % ord(b) for b in mac_string)

虽然如果mac_stringbytearray(或Python 3 中的bytes),考虑到数据的性质,这是比字符串更自然的选择,那么您也不需要ord功能。

示例用法:

>>> prettify(b'5e\x21\x00r3')
'35:65:21:00:72:33'

【讨论】:

  • 我发现b.encode('hex')'%02x' % ord(b) 更易读,但效果是一样的。
【解决方案3】:

Python 3.8 及以上版本中,您可以只使用bytes.hex

b'\x85n:\xfaGk'.hex(":") // -> '85:6e:3a:fa:47:6b'

【讨论】:

    【解决方案4】:

    试试,

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

    addr 是你的字节数组。

    【讨论】:

      【解决方案5】:

      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) 快得多

      【讨论】:

        【解决方案6】:

        通常的十六进制格式不够人类可读吗? (see this 一种将字节转换为十六进制的方法)

        de:ad:be:ef:ca:fe
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-27
          • 2013-08-11
          • 1970-01-01
          • 1970-01-01
          • 2017-09-15
          • 2018-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多