网络数据以十六进制形式转换为python问题中的ascii

时间:2014-09-23 14:45:54

标签: python hex ascii

我试图理解某些东西,所以我以HEX的形式从原始网络数据接收数据,在这个特定的例子中是一个MAC地址,现在我正在使用 Unhexlify()/ Hexilfy()函数来自Python 2.7中的 Binascii 库,例如,我收到了例如以十六进制形式的以下MAC地址

" \ xa5 \ XBB%\ X8F \ XA0 \ XDA"

它是一个六个八位字节长的mac地址,我完全不知道发生了什么......

如果我使用该功能

binascii.hexlify('\xa5\xbb%\x8f\xa0\xda')

它返回

a5bb258fa0da

这确实是我期望收到的正确MAC地址,但这真的没有意义.... " \ xa5 \ xbb%\ x8f \ xa0 \ xda" ,这不是HEX的正确形式,它包含,以及不知怎的, binascii.hexlify()功能设法将其转换为正确的mac地址......

老实说,我没有理解这一点,我猜它与从hex转换为ascii而不是hex到dec有关,但是我没有理解 unhexlify()/ hexlify()函数有效,为什么我以十六进制形式接收数据并且其中包含,但我的十六进制为ascii功能设法处理它... 发生了什么事。

2 个答案:

答案 0 :(得分:1)

"\xa5\xbb%\x8f\xa0\xda" - 它是由十六进制代码定义的字符序列。一个字符为"\xa5",它是单个字符,而不是4.例如,print '\x61'只生成a

关于%符号,它是可打印字符,这就是它在字符串中打印的原因。它具有实际使用的十六进制代码0x25。您可以将其写为\x25"\xa5\xbb\x25\x8f\xa0\xda" 更多here

答案 1 :(得分:1)

Andrey是对的,如果字符前面没有\x,则使用标准ASCII表:

enter image description here

>>> print binascii.hexlify('012')
'303132'