整数与IP地址间的转换

题目:

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址

代码:


while True :
    try:
        #str1 = '10.0.3.193'.split('.')
        str1 = input().split('.')    #输入IP地址,并用'.'进行分割
        str2 = str(bin(int(input()))).split('b')[-1]  #输入转换后的IP地址,将其转换成二进制
        list1 = []
        for i in str1:  #将每一段IP地址中的数字转换成二进制
            erjizhi = str(bin(int(i))).split('b')[-1]
            #print(erjizhi)
            if len(erjizhi) <= 8:   #判断每一个二进制字长是否为8,小于8的话用0进行填充
                erjizhi = '0' * (8 - len(erjizhi)) + erjizhi
                #print(erjizhi)
                list1.append(erjizhi)    #将二进制数添加到list1列表中
        #print(''.join(list1))
        print(int(''.join(list1),2))  #对lsit1中的元素进行拼接

        dic1 = {}  #生成一个空字典
        #print(str2)
        # str1 = '1010000000110000001111000001'
        if len(str2) < 32:    #判断转换后的IP地址转换成二进制后,字长是否小于32, 因为有效个的IP分为4段,每一段转换为8位的二进制的话,最大是8*4=32字节长
            str2 = '0' * (32 - len(str2)) + str2   #不满足的话用0进行填充,就得到了32字长的二进制数字
            #print(str2)

        len1 = int(len(str2) / 8)   #把32字长的二进制数字进行切割,使其每一段长度为8,分割成4分。
        # print(len1)
        # print(type(len1))
        for i in range(0, len1):
            dic1[i] = str2[8 * (i):8 * (i + 1)]
        # print(dic1)
        # print(int('11000001', 2))
        for key in dic1.keys(): #将分割的4段二进制存在dic1字典中,并转换成10进制。
            dic1[key] = int(dic1[key], 2)
        #print(dic1)
        res = []
        for value in dic1.values():  #将转换成4段十进制的数字添加到res列表中去
            res.append(str(value))
        print('.'.join(res))   #使用“.”对4个二进制熟悉进行拼接,并打印出来
    except:
        break

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值