【问题标题】:Convert from mac address to hex string and vice versa - both python 2 and 3从 mac 地址转换为十六进制字符串,反之亦然 - python 2 和 3
【发布时间】:2015-09-08 15:25:01
【问题描述】:

我有想要作为原始数据发送到 dpkt 的 MAC 地址。 dpkt 包希望我将数据作为十六进制字符串传递。 所以,假设我有以下mac地址:'00:de:34:ef:2e:f4',写成:'00de34ef2ef4',我想编码成'\x00\xdeU\xef.\xf4'之类的东西,反向翻译将提供原始数据。

在 Python 2 上,我找到了几种使用 encode('hex') 和 decode('hex') 的方法。 但是,此解决方案不适用于 Python 3。

我很难找到一个 code-sn-p 来支持这两个版本。

我会为此提供帮助。

谢谢

【问题讨论】:

    标签: python python-2.7 python-3.x mac-address dpkt


    【解决方案1】:

    binascii module 适用于 Python 2 和 3:

    >>> import binascii
    >>> binascii.unhexlify('00de34ef2ef4') # to raw binary
    b'\x00\xde4\xef.\xf4'
    >>> binascii.hexlify(_) # and back to hex
    b'00de34ef2ef4'
    >>> _.decode('ascii') # as str in Python 3
    '00de34ef2ef4'
    

    【讨论】:

    • 两种解决方案都成功了,谢谢!我选择这个只是因为我在我的代码中使用了binascii 作为其他方法。
    【解决方案2】:

    任意编解码器之间的python3编码必须使用codecs模块:

    >>> import codecs
    >>> codecs.decode(b'00de34ef2ef4', 'hex')
    b'\x00\xde4\xef.\xf4'
    >>> codecs.encode(b'\x00\xde4\xef.\xf4', 'hex')
    b'00de34ef2ef4'
    

    这仅适用于bytes,不适用于str(unicode)对象。它也可以在 python2.7 中工作,其中strbytesb-prefix 什么都不做。

    【讨论】:

      最近更新 更多