之前转载过一版关于数字ip和ip的转化,但是工作中会遇到负数的形式,所以有没法搞,后来不得已研究了下转化的规律,自己写了一个代码,保证自己的工作效率,今天给大家参考下。
原理简述
ip结构 | 数字ip |
---|---|
000.000.000.000 | 0000000000 |
ip分四段,每段最大数为255,当再加1时,前一段+1,本段变成000
例如:000.000.000.255之后的一个时000.000.001.000
所以数字255对应0.0.0.255
数字256对应0.0.1.0
数字65536对应0.1.0.0
最大数4294967295对应255.255.255.255
至于负数,其实就是正数是相反的
即:-1对应255.255.255.255
-4294967295对应0.0.0.1
所以得到4294967296+(负数)就可得到正数,就可以正常转化了
代码
def IP(x):
#""" 完成数字ip到实际ip的转换
# x:需要转化的数字ip(可以是负数,可以是正数)
# p1:ip中第一个点的位置(从左往右)
# p2:ip中第二个点的位置
# p3:第三个点的位置
# return:返回转化完成的实际ip
#"""
x=int(x)
p1=256*256*256
p2=256*256
p3=256
if x>=0:
a=x//p1#ip第一段数字(从左往右)
b=(x-(p1*a))//p2#ip第二段数字
c=((x-(p1*a))-(b*p2))//p3#ip第三段数字
d=((x-(p1*a))-(b*p2))%p3#ip第四段数字
else:
x1=4294967296+x
a=x1//p1#ip第一段数字(从左往右)
b=(x1-(p1*a))//p2#ip第二段数字
c=((x1-(p1*a))-(b*p2))//p3#ip第三段数字
d=((x1-(p1*a))-(b*p2))%p3#ip第四段数字
return str(a)+'.'+str(b)+'.'+str(c)+'.'+str(d)