Python 套接字错误。恩托尔()

发布于 2024-11-06 18:18:58 字数 416 浏览 0 评论 0原文

我在某些主机上遇到了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美胚控场 2024-11-13 18:18:58

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

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

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

编辑:

Python 2.4 是第一个统一 intlong 的版本,因此您所看到的可能被视为错误该问题已在 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:

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

Edit:

Python 2.4 was the first version to unify int and long so what you see might be considered a bug that has been fixed by 2.7.

Looks like this issue fixed it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文