IPv4地址轉(zhuǎn)換成32位整數(shù)(含代碼和分析邏輯)

題目描述:

存在一種虛擬IPv4地址,由4小節(jié)組成,每節(jié)的范圍為0-255,以#號間隔,虛擬IPv4地址可以轉(zhuǎn)換為一個(gè)32位的整數(shù),例如:128#0#255#255,轉(zhuǎn)換為32位整數(shù)的結(jié)果為2147549183(0x8000FFFF)1#0#0#0,轉(zhuǎn)換為32位整數(shù)的結(jié)果為16777216(0x01000000)。

現(xiàn)以字符串形式給出一個(gè)虛擬IPv4地址,限制第1小節(jié)的范圍為1-128,即每一節(jié)范圍分別為

(1-128)#(0-255)#(0-255)#(0-255)

要求每個(gè)IPv4地址只能對應(yīng)到唯一的整數(shù)上。如果是非法IPv4,返回invalid IP

示例:

1#2#3

invalid 123

1#0#0#0

16777216

128#0#255#255

2147549183

解題思路:

ipv4由4小節(jié)組成,想要變成32位整數(shù),需要每一小節(jié)為8位的二進(jìn)制(這一塊可以用內(nèi)置函數(shù)bin來轉(zhuǎn)換,但是不足8位記得補(bǔ)0,補(bǔ)0的話記得要補(bǔ)在前面),最后4節(jié)合并在一起,這樣才能計(jì)算出32位的整數(shù)


"""

作者:長衣帶風(fēng)

時(shí)間:2023-6-27

ipV4地址轉(zhuǎn)化為32位整數(shù)"""

def ip_32(ip_list1):
    '''
    返回ip對應(yīng)的32位數(shù)    
    :param ip_list1: 列表格式,存放的是ip各個(gè)數(shù)值:['10', '0','0', '254']
    :return: 32位的字符串
    '''
    str_b =""
    for i in ip_list1:
        # 轉(zhuǎn)換為二進(jìn)制
        i1 =str(bin(int(i)))[2:]
        while len(i1) <8:
            i1 ='0' + i1# 也可以用zfill(8)  在左側(cè)填充0來補(bǔ)全
            str_b += i1
    # 總共32位,開始計(jì)算
    sum1 =0
    for num, jin enumerate(str_b[::-1]):
        if int(j) ==1:
            sum1 +=2**num
    return sum1


if __name__ =='__main__':

while True:
    a1 =input()# 輸入ipv4地址中間以 # 分割
    # 確認(rèn)是否是合法的ipv4
    ip_list1 = a1.split("#")
    judge =True
    if len(ip_list1) !=4:
        judge =False
    else:
        for num, iin enumerate(ip_list1):
            if num ==0:
                if (int(i) >=1) & (int(i) <=128):
                    pass
                else:
                     judge =False
                     break
            else:
                if (int(i) >=0) & (int(i) <=255):
                    pass
                else:
                    judge =False
                    break
    if judge ==False:
        # 直接輸出不合規(guī)的ip
        print(f"invalid {a1.replace('#','.')}")
    else:
        # 正常的ip
        ip_num = ip_32(ip_list1)
        print(ip_num)

效果展示:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容