我正在尝试将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'>
为什么?
答案 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