在搞乱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来自哪里,它们意味着什么?在文档中找不到任何关于它们的信息。
答案 0 :(得分:10)
P
,Q
,R
的ASCII代码为80
,81
,82
。
>>> 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地图,可以找到原始来源。