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

整数与IP地址间的转换

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

# 整型转换成二进制
def int2bin(x):
    str_lst = []
    while x!= 0:
      mod = x%2
      str_lst += str(mod)
      x //= 2
    return str_lst[::-1]

# ip地址以分隔符为分割,逐个转换成二进制
def ip2bin(ip):
    bin_rst = []
    for x in ip.split('.'):
        x = int(x)
        bin_len = len(int2bin(x))
		#小于8位则补齐
        if bin_len < 8:
            bin_sec = '0'*(8-bin_len)+''.join(int2bin(x))
            bin_rst += bin_sec
        else:
            bin_sec = ''.join(int2bin(x))
            bin_rst += bin_sec
    return bin_rst
#二进制转换成整型
#bin_rst代表二进制字符 bit_cnt代表二进制数的个数
def bin2int(bin_rst, bit_cnt):
    int_val = 0
    for bit in str(''.join(bin_rst)):
        int_val += int(bit)*2**(bit_cnt)
        bit_cnt -= 1
    return int_val
#32位二进制串,按8个为一组进行转换,转换成ip地址
def bin2ip(bin_rst):
    cnt = 0
    bin_sec = []
    ip = []
    for bit in bin_rst:
        bin_sec += bit
        cnt += 1
        if cnt%8 == 0:
            sec_val = bin2int(bin_sec, bit_cnt=7)
            ip.append(sec_val)
            bin_sec = []
    return ip

if __name__ == '__main__':
    #输入ip
	ip = input()
    bin_rst = ip2bin(ip)
    bit_cnt = 31
    int_val = bin2int(bin_rst, bit_cnt)
    print(int_val)
	#输入整数
    int_val = input()
    int_val = int(int_val)
	#整数转换成32位二进制编码
    bin_rst = '0'*(32-len(int2bin(int_val))) + ''.join(int2bin(int_val))
    ip_lst = bin2ip(bin_rst)
    print('.'.join(str(i) for i in ip_lst))

全部评论

相关推荐

抱抱碍事梨a:三点建议,第一点是建议再做一个项目,把自我介绍部分顶了,第二点是中南大学加黑加粗,第三点是建议加v详细交流
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务