从mac地址转换为十六进制字符串,反之亦然-python 2和3
我想把MAC地址作为原始数据发送给dpkt。 dpkt包希望我以十六进制stings的形式传递数据。 因此,假设我有以下mac地址:从mac地址转换为十六进制字符串,反之亦然-python 2和3,python,python-2.7,python-3.x,mac-address,dpkt,Python,Python 2.7,Python 3.x,Mac Address,Dpkt,我想把MAC地址作为原始数据发送给dpkt。 dpkt包希望我以十六进制stings的形式传递数据。 因此,假设我有以下mac地址:'00:de:34:ef:2e:f4',写为:'00de34ef2ef4',我想编码成类似于'\x00\xdeU\xef.\xf4'的东西,反向翻译将提供原始数据 在Python2上,我找到了两种方法,使用encode('hex')和decode('hex')。 然而,这个解决方案不适用于Python3 在两个版本中,我都很难找到支持这一点的代码段 我想请你帮忙 感
'00:de:34:ef:2e:f4'
,写为:'00de34ef2ef4'
,我想编码成类似于'\x00\xdeU\xef.\xf4'
的东西,反向翻译将提供原始数据
在Python2上,我找到了两种方法,使用encode('hex')
和decode('hex')。
然而,这个解决方案不适用于Python3
在两个版本中,我都很难找到支持这一点的代码段
我想请你帮忙
感谢关于python3,必须使用
编解码器
模块在任意编解码器之间进行编码:
>>> import codecs
>>> codecs.decode(b'00de34ef2ef4', 'hex')
b'\x00\xde4\xef.\xf4'
>>> codecs.encode(b'\x00\xde4\xef.\xf4', 'hex')
b'00de34ef2ef4'
这只适用于字节
,而不适用于str
(unicode)对象。它也适用于python2.7,其中str
是bytes
,而b
-前缀不起任何作用。适用于python2和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
。