结构打包错误:整数超出'L'格式码范围
我正在尝试把 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::
,它的整数表示是 47925062263553288224699872696711774208
,但是当我把这个整数值传给 int2ip
时,出现了以下错误:
struct.error: integer out of range for 'L' format code
其实这个整数值实际上是 long
类型的:
>>> print(type(47925062263553288224699872696711774208)
<type 'long'>
这是为什么呢?
1 个回答
0
你正在尝试把一个128位的数字放进一个32位的地方('L'格式代码)。
Python 3有一个库可以用来管理IP地址(IPv4和IPv6):https://docs.python.org/3/library/ipaddress.html。对于Python 2,有一个可以使用的旧版本:https://pypi.python.org/pypi/ipaddress