我在某些主机上遇到了 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 和 32 位 2s 补码中的 -256 是 0xFFFFFF00。
它通过将值升级为 long 在 Python 2.7 中正常工作:
>>> socket.ntohl(16777215)
4294967040L
>>> hex(4294967040)
'0xffffff00L'
编辑:
Python 2.4 是第一个统一 int
和 long
的版本,因此您看到的可能被认为是 2.7 已修复的错误。
看起来像这样issue修复它。
关于套接字的 Python 错误。 Ntohl() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5995971/