利用lambda表达式,非常简洁

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

 

int to ip的逻辑:

点分十进制,每一个部分都代表8位2进制数, 那么求最高位的时候, 只需要将x/(2^8^3)即可,次高位就是(x/(2^8^2))%(2^8),以此类推

 

ip to int的逻辑:

跟上面反过来, 比如"1.2.3.4"就是 1*2^8^3+2*2^8^2+3*2^8^1+4*2^8^0