我试图理解某些东西,所以我以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功能设法处理它... 发生了什么事。
答案 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表:
>>> print binascii.hexlify('012')
'303132'