Python 套接字错误。恩托尔()
我在某些主机上遇到了 socket.ntohl()
函数的问题。它在所有类似的主机上都是可重复的;使用 Python 2.4.2 的 32 位机器。
>>> socket.ntohl(16777215)
-256
然而,相反的似乎工作正常 -
>>> socket.htonl(4294967040)
16777215
阅读 文档 ,它没有提到任何限制或警告。这是这个旧软件包的 Novell 版本中的错误吗?它们都是 Suse 9 机器:(
I'm having an issue with the socket.ntohl()
function, on some hosts. It is repeatable on all similar hosts; 32bit machines with Python 2.4.2.
>>> socket.ntohl(16777215)
-256
However the reverse seems to work fine -
>>> socket.htonl(4294967040)
16777215
Reading the docs, It doesn't mention any limitations or warnings. Is this a bug in the Novell version of this old package? They are all Suse 9 machines :(
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在较旧的 32 位 Python 版本中,
int
仅限于带符号的 32 位数字。 16777215 = 0x00FFFFFF,-256 的 32 位 2 补码为 0xFFFFFF00。通过将值升级为 long,它可以在 Python 2.7 中正常工作:
编辑:
Python 2.4 是第一个统一
int
和long
的版本,因此您所看到的可能被视为错误该问题已在 2.7 中修复。看起来这个问题已修复它。
In older 32-bit Python versions,
int
was limited to a signed 32-bit number. 16777215 = 0x00FFFFFF and -256 in 32-bit 2s complement is 0xFFFFFF00.It works correctly in Python 2.7 by upgrading the value to a long:
Edit:
Python 2.4 was the first version to unify
int
andlong
so what you see might be considered a bug that has been fixed by 2.7.Looks like this issue fixed it.