在某些主机上,socket.ntohl()函数出现问题。它在所有类似的主机上都是可重复的;带有Python 2.4.2的32位计算机。

>>> socket.ntohl(16777215)
-256

但是相反似乎很好-
>>> socket.htonl(4294967040)
16777215

阅读the docs,它没有提到任何限制或警告。这是旧程序包的Novell版本中的错误吗?它们都是Suse 9机器:(

最佳答案

在较旧的32位Python版本中,int仅限于带符号的32位数字。 16777215 = 0x00FFFFFF和-256(32位2s补码)为0xFFFFFF00。

通过将值升级为long可以在Python 2.7中正常工作:

>>> socket.ntohl(16777215)
4294967040L
>>> hex(4294967040)
'0xffffff00L'

编辑:

Python 2.4是第一个统一intlong的版本,因此您看到的内容可能被视为2.7已修复的错误。

看起来像issue修复了它。

关于python - 套接字出现Python错误。 Ntohl(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5995971/

10-11 07:36
查看更多