Ошибка Python с сокетом. Ntohl () - PullRequest
2 голосов
/ 13 мая 2011

У меня проблема с функцией socket.ntohl() на некоторых хостах. Это повторяется на всех подобных хостах; 32-битные машины с Python 2.4.2.

>>> socket.ntohl(16777215)
-256

Однако, похоже, обратное работает нормально -

>>> socket.htonl(4294967040)
16777215

Чтение документов , в нем не упоминаются какие-либо ограничения или предупреждения. Это ошибка в версии Novell этого старого пакета? Это все машины Suse 9: (

1 Ответ

3 голосов
/ 13 мая 2011

В более старых 32-битных версиях Python int ограничивалось 32-битным числом со знаком. 16777215 = 0x00FFFFFF и -256 в 32-битном дополнении 2 с - 0xFFFFFF00.

Он работает правильно в Python 2.7, обновляя значение до long:

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

Edit:

Python 2.4 был первой версией, унифицировавшей int и long, поэтому то, что вы видите, может рассматриваться как ошибка, исправленная в 2.7.

Похоже, что проблема исправлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...