В более старых 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.
Похоже, что проблема исправлена.