IP的str和int转换实现

使用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))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值