使用python内置库进行相互转换
问题: 为什么要将ip 转成int型呢? 在计算机中int(2^32 一下都是) 内存占用4个bit
而str的字符串内存占用在7~~15 字符串之间, 一个字符占用2个字节
转换成int类型可以大大节省内存
import socket
import struct
ip = '127.0.0.1'
int_ip = struct.unpack('!I', socket.inet_aton(ip))[0]
print(int_ip) # Out: 2130706433
str_ip = socket.inet_ntoa(struct.pack('!I', int_ip))
print(str_ip) # Out: 127.0.0.1
自己代码实现
猜测str 转成int 类型是对应它的种类
测试:
果然是数字对应: 那我们接下来就可以用代码做相应的实现了
- IP str 转 int
def ip_str_to_int(str_ip):
ls = str_ip.split('.')
if ls.__len__() != 4:
print(f'Error IP:{str_ip}')
return None
ff = lambda x: 2 ** 8 * int(x)
int_ip = ff(ff(ff(ls[0]))) + ff(ff(ls[1])) + ff(ls[2]) + int(ls[3])
return int_ip
- IP int 转 str
def ip_int_to_str(int_ip):
position_one = int_ip // 2**24
remainder = int_ip - position_one * 2 ** 24
position_two = remainder // 2 ** 16
remainder = remainder - position_two * 2 ** 16
position_three = remainder // 2 ** 8
position_four = remainder - position_three * 2 ** 8
return f"{position_one}.{position_two}.{position_three}.{position_four}"
验证:
print(ip_str_to_int(‘127.0.0.1’))
print(ip_int_to_str(2130706433))