Python socket错误:Ntohl()

2 投票
1 回答
2704 浏览
提问于 2025-04-16 17:35

我在一些主机上遇到了socket.ntohl()函数的问题。在所有类似的主机上,这个问题都是可以重复出现的;这些主机都是32位的,使用的是Python 2.4.2。

>>> socket.ntohl(16777215)
-256

不过,反向操作似乎没有问题 -

>>> socket.htonl(4294967040)
16777215

我查看了文档,里面没有提到任何限制或警告。这是这个旧包在Novell版本中的一个bug吗?它们都是Suse 9的机器 :(

1 个回答

3

在以前的32位Python版本中,int类型只能表示一个有符号的32位数字。比如16777215在十六进制中表示为0x00FFFFFF,而-256在32位的补码表示法中是0xFFFFFF00。

在Python 2.7中,通过将这个值升级为长整型(long),它就能正常工作了:

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

编辑:

Python 2.4是第一个将intlong合并的版本,所以你看到的这个情况可以算是一个bug,而在2.7中已经修复了。

看起来这个问题已经解决了。

撰写回答