套接字的 Python 错误。 Ntohl() 函数

标签 python sockets

我在某些主机上遇到了 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 是第一个统一 intlong 的版本,因此您看到的可能被认为是 2.7 已修复的错误。

看起来像这样issue修复它。

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

相关文章:

python - Entry() 没有出现在我的程序中

python - 对多索引列数据帧进行切片以获得新的数据帧

python - 使用 python Xlib 重命名窗口

c++ - 为什么 puts() 函数没有在客户端 - 服务器套接字代码中打印多个输出?

python - 在Python中调用select

python - TCP 通信 Python 上的 ValueError

actionscript-3 - 如何使用 Flex/ActionScript 3 通过 Socket 传输实时视频?

来自套接字的 Python 十六进制转换为 ascii

python - 将 UTC 日期时间转换为 pandas 中的本地日期时间

python - 查找列表中两个标签之间的元素