python中实现IP的str与long integer型互换的二个方法,有需要的朋友可以参考下。
方法一:
网上说得比较多的一种方法
def ip2int (addr):
return struct.unpack('I',struct.pack('i',(socket.ntohl(struct.unpack('i', socket.inet_aton(addr))[0]))))[0]
def int2ip (addr):
return socket.inet_ntoa(struct.pack('i',socket.htonl(addr)))
ip = "192.168.1.213"
intip = 3232235823
print "%s to int is %d" % (ip, ip2int(ip))
print "%d to str is %s" % (intip, int2ip(intip))
方法二:
def dottedQuadToNum(ip):
"convert decimal dotted quad string to long integer"
hexn = ''.join(["%02X" % long(i) for i in ip.split('.')])
return long(hexn, 16)
def numToDottedQuad(n):
"convert long int to dotted quad string"
d = 256 * 256 * 256
q = []
while d > 0:
m,n = divmod(n,d)
q.append(str(m))
d = d/256
return '.'.join(q)
print dottedQuadToNum("192.168.1.47")
print numToDottedQuad(3232235823)
说明:
1)、方法一在windows下运行正常,在ubuntu中测试出错:struct.error: long too large to convert to int。
2)、方法二在windows、ubuntu均测试通过。