题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

'''
解题思路:
创建IP转整数的子函数ip_int()。
以及整数转IP的字函数int_ip()。
一、IP地址转整数:
输入的IP地址字符串按照逗号'.'为分割依据分割成数组,
然后遍历存储有IP地址4个段数字的数组,
先将其转换为整数后转换为2进制数,
2进制数再转换成字符串,
截取字符串除串首的'0b'外的所有字符,
将其与已完成转换的'01'2进制整数字符串相加,
最后在转换完成的'01'2进制字符串首加'0b'2进制标识,
在将其转换为可直接读取的序列(eval()函数实现)后转换为10进制整数。
二、整数转IP地址
......
需要注意中间需要大量的类型转换。
'''

def ip_int(ip):#将IP地址字符串转换为整数的子函数
    out = ""#2进制整数字符变量

    for i in ip.split("."):#依次读取IP地址4个位的整数字符
        out = out + str(bin(int(i)))[2:].zfill(8)#将整数字符转换为2进制字符,并添记到2进制整数字符变量的末尾,每次记得补齐字符串成8位

    return int(eval("0b" + out))#函数返回10进制的IP地址


def int_ip(ip):#将输入的整数转换为IP地址的子函数
    bin_ip = str(bin(int(ip)))[2:].zfill(32)#将输入的整数字符转换为2进制'01'字符串,并补齐字符串位32位
    s_ip = ""

    for i in range(0, 32, 8):#遍历2进制字符串序列,每次截取8位转换成整数
        s_ip = s_ip + str(int(eval("0b"+bin_ip[i:i+8]))) + "."#当前截取的2进制字符串转换成整数字符后,在结尾添加分段字符.'

    return s_ip.strip(".")#取消右边多余的分段字符'.'后返回IP字符串


print(ip_int(input()))#将输入的IP地址转换成整数,并且打印输出
print(int_ip(input()))#将输入的整数转换成IP地址,并且打印输出

#华为机试#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务