python整数与IP地址转换

看过Discuz!论坛的数据库用户表的设计,用户相关的ip地址和时间戳一般都用的一个int(10)的字段来存储。
存储int相对于char来说,当然是优点多多了。
python怎样将一个整数与IP地址相互转换?
>>> import socket,struct
>>> int_ip = 123456789
>>> socket.inet_ntoa(struct.pack(‘I’,socket.htonl(int_ip)))#整数转换为ip地址
‘7.91.205.21’
>>> str(socket.ntohl(struct.unpack(“I”,socket.inet_aton(“255.255.255.255″))[0]))#ip地址转换为整数
‘4294967295’
实际上也就是进制数的转换
用lambda的方式,int2ip一行代码搞定
>>> int2ip = lambda x: ‘.’.join([str(x/(256**i)%256) for i in range(3,-1,-1)])
>>> int2ip(123456789)
‘7.91.205.21’
用lambda的方式,ip2int
>>> ip2int = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split(‘.’)[::-1])])
>>> ip2int(‘7.91.205.21′)
123456789

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>