struct pack错误:“L”格式代码的整数超出范围

时间:2014-04-08 09:50:13

标签: python

我正在尝试将int数据传输到IP地址,IPV6和IPv4

def int2ip(i):
    if i > sys.maxint * 2 - 1: # ipv6
        socket.inet_ntop(socket.AF_INET6, struct.pack('!L', i))
    socket.inet_ntop(socket.AF_INET, struct.pack('!I', i)) # ipv4

但对于IPv6地址240e:800::,它的int表示为47925062263553288224699872696711774208,但在将int值传递给int2ip时,抛出以下错误:

struct.error: integer out of range for 'L' format code

但int值实际上是long类型:

>>> print(type(47925062263553288224699872696711774208)
<type 'long'>

为什么?

1 个答案:

答案 0 :(得分:0)

您正在尝试将128位数字放入32位('L'格式代码)。

Python 3有一个用于管理IP地址的库(4&amp; 6):https://docs.python.org/3/library/ipaddress.html。 对于python2,有一个backport:https://pypi.python.org/pypi/ipaddress