题解 | #整数与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))