3

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

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

我很难找到一个代码片段来支持这两个版本。

我会为此提供帮助。

谢谢

4

2 回答 2

7

binascii模块适用于 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'
于 2015-09-08T17:55:03.703 回答
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 中工作,其中strisbytesb-prefix 什么都不做。

于 2015-09-08T15:42:33.430 回答