首页 > 编程知识 正文

ip地址点分十进制转换,点分十进制数表示IP地址

时间:2023-05-03 06:30:10 阅读:225757 作者:1486

0.摘要

本文主要介绍32位二进制ip地址和十进制数字地址相互转换方式,并用python3实现。

 

1.ip地址与数字地址转换关系

我们知道ip地址实际上是32位二进制数,例如:

点分十进IP地址100.4.5.6 <---->32位二进制数01100100.00000100.00000101.00000110

若将32位二进制数转换为十进制,就得到了数字地址。

简单来说,就是先将IP地址四个整数值转为二进制,四个二进制数值拼接之后,再由二进制转为十进制。

 

2.转换方式

通过观察可以发现:

十进制

二进制

100

01100100

4

00000100

5

00000101

6

00000110

根据二进制运算规则,可知:

2^24 * (01100100)=01100100 00000000 00000000 000000002^16 * (00000100)=00000000 00000100 00000000 000000002^8 *  (00000101)=00000000 00000000 00000101 000000002^0 *  (00000110)=00000000 00000000 00000000 00000110

那么,将ip地址的四个二进制数拼接起来,可以通过这样的方式:

01100100 00000100 00000101 00000110 = 2^24 * (01100100) + 2^16 * (00000100) + 2^8 * (00000101) + 2^0 * (00000110)

结论:将点分十进IP的ip地址转化成十进制数字地址,只要将对应数字分别乘以2^24,2^16,2^8 ,2^0,最后相加即可。

下面的两个表格给出了点分十进IP与数字地址的转换关系:

点分十进IP ----> 数字地址 IP数字地址A.B.C.D2^24 * A + 2^16 * B + 2^8 * C + 2^0 * D 点分十进IP <---- 数字地址 IP数字地址A(VALUE // (2 ** 24) ) % (2 ** 32)B(VALUE // (2 ** 16) ) % (2 ** 24)C(VALUE // (2 ** 8) ) % (2 ** 16)D(VALUE // (2 ** 0) ) % (2 ** 8)def ip2decimalism(ip): dec_value = 0 v_list = ip.split('.') v_list.reverse() t = 1 for v in v_list: dec_value += int(v) * t t = t * (2 ** 8) return dec_valuedef decimalism2ip(dec_value): ip = '' t = 2 ** 8 for _ in range(4): v = dec_value % t ip = '.' + str(v) + ip dec_value = dec_value // t ip = ip[1:] return ipif __name__ == '__main__': while(1): ip = input() dec_value = ip2decimalism(ip) print(dec_value) ip = decimalism2ip(dec_value) print(ip)

可见程序成功实现了点分十进制ip地址转为十进制数字地址的相互转换。

这里留一个在线转换器,帮助大家验证自己的代码:

http://www.cha127.com/long2ip/?islong=2792312265&2ip=true

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。