# (a)创建一个从整数到IP 地址的转换程序,如下格式: WWW.XXX.YYY.ZZZ.
# (b)更新你的程序,使之可以逆转换.
def num_to_ip(a_num):
src = int(a_num)
str_ip = ""
tmp = src//(256**3)
str_ip += str(tmp)
str_ip += '.'
src -= tmp*(256**3)
tmp = src//(256**2)
str_ip += str(tmp)
str_ip += '.'
src -= tmp*(256**2)
tmp = src//(256)
str_ip += str(tmp)
str_ip += '.'
src -= tmp*256
str_ip += str(src)
return str_ip
# num = raw_input("Input a number to ip: ")
# print(num_to_ip(num))
def ip_to_num(ip):
num_list = ip.split('.')
num_list.reverse()
ret_num = 0
for i in range(len(num_list)):
ret_num += int(num_list[i])*pow(256, i)
return ret_num
ip = raw_input("Input a ip to number: ")
print(ip_to_num(ip))
这里的num_to_ip这个函数我不太明白
这里ip的每一项可以用一个字节表示0-255
用四个字节就可以表示ipv4的地址,将这四个字节按一个整数解释,用ip_to_num转换结果就是一个32位整数
num_to_ip依次取出32位整数表示的ip的每一字节项,用.连接成ip地址
比如a.b.c.d用32位整数表示就是num = a*(256**3) + b*(256**2) + c*(256**1) + d*(256**0)
通过num整除(256**3)能得到a
之后将num减去a*(256**3)并整除(256**2)能得到b
src//(256**3) 实质上就是src左移 8*3=24位,就是相当于将高8位移到低八位,高24位补 // 是整数除的意思。
src -= tmp*(256**3) 这个由于已经计算完高8位了,需要将高八位置0,tmp = src//(256**2) 再计算高9位到高16位
其他类似