原理: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地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
示例1
输入:
10.0.3.193
167969729
输出:
167773121
10.3.3.193
def binConv(instr):
ins = instr
newlis = []
if '.' in ins:
lis = ins.split('.')
# print(lis)
# ['10', '0', '3', '193']
lis = list(map(int,lis))
lis = list(map(bin,lis))
# print(lis)
# ['0b1010', '0b0', '0b11', '0b11000001']
for i in lis:
if len(i[2:]) != 8:
others = 8 - len(i[2:])
newlis.append(others*'0' + i[2:])
if len(i[2:]) == 8:
newlis.append(i[2:])
# print(newlis)
# ['00001010', '00000000', '00000011', '11000001']
newlis = ''.join(newlis)
# 00001010 00000000 00000011 11000001
newlis = int(newlis,2)
print(newlis)
if '.' not in ins:
temp = bin(int(ins))
# print('temp: ',temp)
# temp: 0b1010000000110000001111000001
# 658654280
# temp: 0b11100110100101101101000010011111
# 57.165.180.39
if len(temp[2:]) != 32:
others = '0'*(32-len(temp[2:]))
temp = others + temp[2:]
# print(temp)
# 00001010 00000011 00000011 11000001
newlis = [int(temp[0:8],2),int(temp[8:16],2),int(temp[16:24],2),int(temp[24:32],2)]
# print(newlis)
# [10, 3, 3, 193]
print('.'.join(map(str,newlis)))
# 10.3.3.193
if len(temp[2:]) == 32:
temp = temp[2:]
# 658654280
# 230.150.208.159
# 658654280
# 57.165.180.39 错误,需要截取除去第12位的0b
newlis = [int(temp[0:8],2),int(temp[8:16],2),int(temp[16:24],2),int(temp[24:32],2)]
# print('32: ',newlis)
# 32: [57, 165, 180, 39]
print('.'.join(map(str,newlis)))
# 230.150.208.159
for i in range(2):
instr = input().strip()
# print(instr)
# 10.0.3.193
# 167969729
binConv(instr=instr)