HJ33 整数与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 序列

输入描述:#

输入
1 输入IP地址
2 输入10进制型的IP地址

代码和思路#


while True:
    try:
        ip = input()
        num = input()
    except:
        break
    else:
        """
如果输入的是一个ip地址,首先将字符串以.为分隔符分开,再对每一块进行
二进制转换,十进制或者其他进制转二进制时,前面会加上两个字符的前缀
所以需要切片,然后对二进制数补0,将字符串拼起来,然后转化为10进制
"""
        list1 = ip.split('.')
        target =str()
        for i in list1:
            a = bin(int(i, 10))[2:]
            if len(a)<8:
                s='0'*(8-len(a))+a
            else:
                s=a
            target+=s
        print(int(target,2))
        """
        如果输入的是整数,先将其转化为2进制,记得分片,然后补0,
再用循环分片将其分为8个一组,对每组进行转化整数,然后变成字符串,
加入数组,用.将数组中的元素链接,形成ip地址

        """
        res = []
        num2=bin(int(num,10))[2:]
        num2='0'*(32-len(num2))+num2 if len(num2)<32 else num2
        for i in range(4):
            b=num2[8*i:8*i+8]
            b=str(int(b,2))
            res.append(b)
        print('.'.join(res))

输出描述:#

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

posted @   最大的敌人是自律  阅读(210)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示
主题色彩