ip_int = 1234567 # 将int转ip(str) 原理:将整数转换成无符号32位的二进制,用'.'对每8位进行分割,每8位转换成十进制即可。 ip = IPy.intToIp ( ip_int, 4 ) print ( ip, type ( ip )) # 将ip转int print ( IPy.parseAddress ( ip, 4 ) , type ( IPy.parseAddress ( ip, 4 ) [ 0 ] )) python IP y模块虽然可以实现一些 ip 地址的判断,但是不是很完美,有些场景根本判断不出来,还会抛出异常,比如一个地址范围和一个 ip /掩码,这种不同类型就无法判断。 对此通过自己写函数来实现 ip 地址的判断,实现的思路很简单,先把 ip 地址转换为一个十进制的范围数,然后来判断是否有包含关系。 #下面函数可以将 ip 转换为十进制数 def ip to int (self, ip ): s = ip .split('.') for temp in s: a=bin( int (temp))[2:] a=a.zfill(8) 今天有人问我 “为什么数据库 有人推荐使用 int 类型来保存 IP 地址?”。现在(2020年)来看这个东西已经有点过时了,一方面是磁盘空间不在那么贵,另一方面是 IP v6 与这条法则不兼容。 下面我们就来看一下把 IP v4 地址转换成整数的原理和收益各是什么。 转换的原理 一个 IP v4 类的地址共分为四个部分 0.0.0.0 然而每一个部分的取值范围都在 0 ~ 255;也就是说每一个部分都可以用一个字节来保存,总共写个字节就够了,4 个字节不就是 int 吗? 第一步 把 IP 地址的各个部分转换为一个字节,并拼接它们,那么会得到一个 4 字节的串。 import struct 大家应该都有所体会,对于字符串型的 IP 存入数据库 ,实在是个即浪费空间又浪费性能的家伙,所以可爱的人们想出来将 IP 转换为整型存储。MySQL 存在INET_ATON() 、INET_NTOA()函数进行 IP 整型和字符串 之间 的转换,那么 Python 存在什么方法可以实现MySQL INET_ATON() 、INET_NTOA()的功能呢?方法肯定是有的~ # 导入相关模块包 import socket import struct # 将 IP 从字符串转为整型 >>> int (socket.inet_aton('127.0.0.1').encode('hex'),16) 21307 def ip 2 int ( ip ): return sum( int (v) * 256 ** (3 - i) for i, v in enumerate( ip .split("."))) int 型整数值转为字符串 ip : def int 2 ip (number): result = [] for i in range(4): number, mod = divmod(number, 256) result.insert(0, mo if __name__ == '__main__': ip = '127.0.0.1' int _ ip = struct.unpack('!I', socket.inet_aton( ip ))[0] pr int ( int _ ip ) str_ ip = socket.inet_ntoa(struct.p... 在项目 ,我们经常会保存用户的 ip ,做一些判断,但是由于sql效率的原因,存整形比较好,所以,我们要把 ip 转化 int ,如何 转化 那? def int _ ip (num): s = [] for i in range(4): s.append(str(num %256)) num //= 256 return '.'.join(s[::-1]) def ip _ int ( ip ): res = 0 for j, i in enumerate(i. 一个 IP 地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的 IP 地址转换为十进制格式表示的 IP 地址输出。 输入格式: 输入在一行 给出32位二进制字符串。 输出格式: 在一行 输出十进制格式的 IP 地址,其由4个十进制数组成(分别对应4个8位的二进制数), 间用“.”分隔开。 输入样例: 11001100100101000001010101110010 输出样例: 204.14... 使用 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] pr int ( int _ ip ) # Out: 2130706433 Python 3.4 官方文档说明: socket.inet_aton( ip _string) Convert an IP v4 address from dotted-quad string format (for example, ‘123.45.67.89’) to 32-bit packed b... python IP int int IP IP 地址意义 IP 地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。 IP 地址通常用“点分十进制”表示成(a.b.c.d)的形式,其 ,a,b,c,d都是0~255 之间 的十进制整数。例:点分十进 IP 地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。