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

python问题中十六进制转换为ascii格式的网络数据,python,hex,ascii,Python,Hex,Ascii,我试图理解一些东西,所以我以十六进制的形式从原始网络数据接收数据,在这个特定的示例中是一个MAC地址,现在我使用Python 2.7中Binascii库中的unexlify()/Hexilfy()函数,例如,例如,我收到以下十六进制格式的MAC地址 “\xa5\xbb%\x8f\xa0\xda” 这是一个六个八位组长的mac地址,我完全不知道发生了什么 如果我使用这个函数 binascii.hexlify('\xa5\xbb%\x8f\xa0\xda') 它回来了 a5bb258fa0da

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

“\xa5\xbb%\x8f\xa0\xda”

这是一个六个八位组长的mac地址,我完全不知道发生了什么

如果我使用这个函数

binascii.hexlify('\xa5\xbb%\x8f\xa0\xda')
它回来了

a5bb258fa0da
这确实是我期望收到的正确MAC地址,但这真的没有意义。。。。 “\xa5\xbb%\x8f\xa0\xda”,这不是正确的十六进制格式,它包含一个%,而binascii.hexlify()函数设法将其转换为正确的mac地址

老实说,我无法理解这一点,我猜这与从十六进制转换为ascii有关,而不是从十六进制转换为dec有关,但我无法理解unhexlify()/hexlify()函数是如何工作的,我为什么接收十六进制形式的数据,其中包含%,但我的十六进制到ascii函数成功地处理了它。。。 发生了什么。

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

关于%符号,它是可打印字符,这就是为什么它以字符串形式打印。它有实际使用的十六进制代码
0x25
。您可以将其写成
\x25
“\xa5\xbb\x25\x8f\xa0\xda”

更多信息。

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

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


这并不能解释第二个字符
\xbb
@user3687265后面的
%
,它只是碰巧有code
25
的字符。不多不少。不是整个ASCII表,只是0x20到0x7e部分。我不明白为什么这个binascii.hexlify('0')返回30。。。你能再给我解释一下吗?@user3687265字符
'0'
是表中的ASCII符号编号48,以16为底的48是30。