python ip地址与整形互转

为什么要将ip转int,这是为了数据库保存ip地址时可以使用整形字段保存,性能更高
转换后同样可以使用整形进行访问网站,即http://47.74.189.133 = http://793427333

使用socket 和 struct

def ip_to_int(ip):
    """ip地址转数字"""
    import socket
    import struct
    return socket.ntohl(struct.unpack("I", socket.inet_aton(str(ip)))[0])

def int_to_ip(num):
    '''整形转ip地址'''
    import socket
    import struct
    return socket.inet_ntoa(struct.pack("!I", num))
if __name__ == '__main__':
    print(ip_to_int('47.74.189.133'))  # 793427333
    print(int_to_ip(793427333))  # 47.74.189.133

其实这是进制的转换。可以不用三方包手写转换

func = lambda x: '.'.join([str(int(x / (256 ** i) % 256)) for i in range(3, -1, -1)])
func(793427333)
func = lambda x: sum([256 ** j * int(i) for j, i in enumerate(x.split('.')[::-1])])
func('47.74.189.133')

你可能感兴趣的:(python ip地址与整形互转)