struct.pack的奇怪结果?

时间:2013-10-07 13:48:52

标签: python

在搞乱struct.pack()和socket.htons()时,我得到了一些对我没有意义的结果......

>>> struct.pack("h", socket.htons(80))
'\x00P'
>>> struct.pack("h", socket.htons(81))
'\x00Q'
>>> struct.pack("h", socket.htons(82))
'\x00R'

P,Q和R来自哪里,它们意味着什么?在文档中找不到任何关于它们的信息。

2 个答案:

答案 0 :(得分:10)

PQR的ASCII代码为808182

>>> ord('P')
80

在交互式shell中,可打印字符会自行打印,而不是使用\xhh格式进行转义。

>>> hex(80)
'0x50'
>>> '\x50'
'P'
>>> '\xff'
'\xff'

答案 1 :(得分:0)

struck.pack():返回一个bytes对象。 像这样:

>>> type(struct.pack("h", socket.htons(80)))

<class 'bytes'>

当你在shell中显示对象时,她以十六进制方式显示(符号为0x),所以如果你把它切换成十进制,并比较ASCII地图,可以找到原始来源。