我目前正在研究Python中的socket编程,但是我在使用socket.htons()时遇到了一些奇怪的行为...它似乎在每次调用时都会翻转字节。
我正在实现一个简单的ping脚本,据我所知,网络字节顺序是大端字节序,而我的系统字节顺序是小端字节序。
如果我对我的16位校验和使用htons,Wireshark报告说它是不正确的,但是如果我只是将校验和打包到一个结构体中而没有使用htons,Wireshark确认它是正确的。
这是在使用htons时Wireshark捕获的内容。
Checksum: 0xece4 [incorrect, should be 0xe4ec]
以下是一个快速的例子...
>>> z = 0xFF00
>>> print z
65280
>>> z = socket.htons(z)
>>> print z
255
>>> z = socket.htons(z)
>>> print z
65280
任何关于此事的想法都将不胜感激,希望只是我做错了什么。
编辑:
>>> print sys.byteorder
little
print sys.byteorder
,以便再次检查字节序吗? - chownhtons()
都会翻转传递给它的参数的字节顺序。毕竟,它是无状态的,数据本身没有任何信息表明“我是大端序”或“我是小端序”。 - vanza