1. 程式人生 > >點分十進位制ip地址轉為十進位制數字地址-python3實現

點分十進位制ip地址轉為十進位制數字地址-python3實現

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 00000000
2^16 * (00000100)= 00000000 00000100 00000000 00000000
2^8 *  (00000101)= 00000000 00000000 00000101 00000000
2^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.D 2^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_value

def 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 ip

if __name__ == '__main__':
    while(1):
        ip = input()
        dec_value = ip2decimalism(ip)
        print(dec_value)
        ip = decimalism2ip(dec_value)
        print(ip)

可見程式成功實現了點分十進位制ip地址轉為十進位制數字地址的相互轉換。

這裡留一個線上轉換器,幫助大家驗證自己的程式碼: