首页 > 试题广场 >

整数与IP地址间的转换

[编程题]整数与IP地址间的转换
  • 热度指数:227245 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

原理: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
while True:
    try:
        ip = input()
        num_str = input()
        s = ip.split('.')


        bit = 1
        res  = 0
        for si in reversed(s):

            res += bit * int(si)
            bit <<= 8
        print(res)

        num = int(num_str)

        res_ip = []
        bit = 1<< 8
        for i in range(4):

            res_ip.append(str(num % (bit)))
            num >>= 8

        print('.'.join(reversed(res_ip)))
    except:
        break
发表于 2021-05-06 14:42:49 回复(0)
while True:
    try:
        str1 = input().split('.')
        str2 = str(bin(int(input(), 10)))
        for i in range(4):
            str1[i] = bin(int(str1[i], 10))
            str1[i] = str1[i].replace('0b', '')
            if i > 0:
                padding = 8 - len(str1[i])
                for j in range(padding):
                    str1[i] = ''.join(('0', str1[i]))
        num = int(''.join(str1), 2)
        print(num)
        ip3 = str(int(str2[-8:], 2))
        ip2 = str(int(str2[-16:-8], 2))
        ip1 = str(int(str2[-24:-16], 2))
        ip0 = str(int(str2[2:-24], 2))
        ip = '.'.join((ip0, ip1, ip2, ip3))
        print(ip)
    except EOFError:
        break

发表于 2021-03-30 18:21:59 回复(0)
def ip_to_num(ip):
    nums = map(int, ip.split("."))
    bin_form = ""
    for n in nums:
        bin_form += bin(n)[2:].rjust(8, "0")
    return int(bin_form, base=2)


def num_to_ip(num):
    bin_form = bin(int(num))[2:].rjust(32, "0")
    ip = ""
    for i in range(4):
        ip += (str(int(bin_form[8*i:8*i+8], base=2)) + ".")
    return ip[:-1]


while True:
    try:
        ip, num = input(), input()
        print(ip_to_num(ip))
        print(num_to_ip(num))
    except:
        break

发表于 2020-12-15 21:53:16 回复(0)
while 1:
    try:
        a=list(map(int,input().split('.')))
        b=int(input())
        c=''
        for i in a:
            s=bin(i)
            s=s[2:]
            while (len(s)<8):
                s='0'+s
            c += s
        print(int(c,2))
        b=bin(b)[2:]
        while (len(b)<32):
            b= '0'+b
        print(str(int(b[0:8],2))+'.'+str(int(b[8:16],2))+'.'+str(int(b[16:24],2))+'.'+str(int(b[24:32],2)))
    except:
        break
发表于 2020-11-18 18:09:49 回复(0)
while True:
    try:
        ip_in = input()
        ip_int_in = input()
        ip_bin_list = map(lambda x: bin(int(x))[2:].zfill(8), ip_in.split('.'))
        ip_int_out = int(''.join(ip_bin_list), 2)
        print(ip_int_out)
        ip_bin = bin(int(ip_int_in))[2:].zfill(32)
        ip_bin_list = [ip_bin[i:i+8] for i in range(0, len(ip_bin), 8)]
        ip_int_list = map(lambda x: str(int(x, 2)), ip_bin_list)
        ip_out = '.'.join(ip_int_list)
        print(ip_out)
    except:
        break
发表于 2020-09-26 21:07:53 回复(0)
def change_ip(ip):
    a = ip.split(".")
    s = ""
    for i in a:
        s += bin(int(i))[2:].rjust(8, "0")
    return int(s, 2)

def change_address(adress_num):
    s = bin(adress_num)[2:].rjust(32, "0")
    li = [int(s[8 * i:8 * (i + 1)], 2) for i in range(4)]
    address = ".".join(map(str,li))
    return address

while True:
    try:
        ip, address_num = input(), int(input())
        print(change_ip(ip))
        print(change_address(address_num))
    except:
        break
发表于 2020-09-04 11:05:49 回复(0)
while True:
    try:
        ip , dec = list(input().split('.')),int(input())
        toDec = ""
        for i in ip:
            toDec += bin(int(i))[2:].zfill(8)  #左填充
        print(int(toDec,2))
        ipBin = bin(dec)[2:].zfill(32)
        toIp = []
        for i in range(0,31,8):
            toIp.append(str(int(ipBin[i:i+8],2)))  #join()方法需要把int转str
        print('.'.join(toIp))
    except:
        break
看了前人写的,感觉自己是个fool,c++位操作大法好
发表于 2020-08-31 16:04:50 回复(0)
#int()函数不但可以将数字或字符转为整数,
#还可以将字符串按照指定的进制转换为十进制整数表示。
#如将二进制数“1111”按照二进制数转为整数(十进制表示)
#    print(int("1111",4))
#    print(int("1111",8))
#    print(int("1111",16))
#    print(int("1111",32))

while True:
    try:
        list1 = list(map(int,input().split('.')))
        s1 = int(input())
        res = ''
        for i in list1:
            res+='0'*(8-len(bin(i)[2:]))+bin(i)[2:]
        print(int(res,2))    
            
        res2 = '0'*(32-len(bin(s1)[2:]))+bin(s1)[2:]
        n1 = int(res2[0:8],2)
        n2 = int(res2[8:16],2)
        n3 = int(res2[16:24],2)
        n4 = int(res2[24:32],2)
        print(str(n1)+"."+str(n2)+"."+str(n3)+"."+str(n4))
    except:
        break
发表于 2020-07-20 00:02:24 回复(0)
import re
while True:
    try:        
        ips=""
        temp=""
        temp2=""
        s=""
        str_list=[]
        str1=input()
        if re.search(r'^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$',str1):
            ip_list=str1.split('.')
            for num in ip_list:
                ips+=str(bin(int(num)))[2:].rjust(8,'0')
            print(int('0b'+ips,2))
        elif re.search(r'^[0-9]+$',str1):
            s=str(bin(int(str1))[2:].rjust(32,'0'))
            for i in range(len(s)):
                temp+=s[i]
                if (i+1)%8 == 0:
                    str_list.append(str(int('0b'+temp,2)))
                    temp=""
            print(".".join(str_list))
        else:
            exit()
    except:
        break
发表于 2020-06-01 03:39:23 回复(0)
python
while True:
    try:
        ls1 = list(map(lambda x:('0'*(8-len(x))+x),list(map(lambda x:x[2:],list(map(bin,list(map(eval,input().split('.')))))))))
        print(int('0b'+''.join(ls1),2))
        num = eval(input())
        a ='0'*(32-len(str(bin(num))[2:]))+str(bin(num))[2:]
        print('.'.join(list(map(str,list(map(lambda x:int(x,2) ,list(map(lambda x:('0b'+x),[a[i*8:(i+1)*8] for i in range(4)]))))))))
    except:
        break

编辑于 2020-05-17 11:00:12 回复(0)

Python三行代码,思维清晰

while 1:
    try:
        print(int("".join([bin(int(ele))[2:].rjust(8, "0") for ele in input().split(".")]), 2))
        binStr = bin(int(input()))[2:].rjust(32, "0")
        print(".".join([str(int(ele, 2)) for ele in [binStr[8 * i:8 * (i + 1)] for i in range(4)]]))
    except:
        break
发表于 2020-05-04 07:30:27 回复(1)
while True:
    try:
        a=input().split('.')
        b=input()
        s=''
        d=[]
        e=[]
        for i in a:
            s+=bin(int(i)).replace('0b','').rjust(8,'0')
        print(int(s,2))
        bb=bin(int(b)).replace('0b','').rjust(32,'0')
        while len(bb)>=8:
            d.append(bb[:8])
            bb=bb[8:]
        for i in d:
            e.append(str(int(i,2)))
        print('.'.join(e))
    except:break

发表于 2020-02-19 19:38:19 回复(0)
while True:
  try:
    a,b,c,d = input().split("."),input(),"",[]
    # 10进制转换
    for i in a:
      c += bin(int(i)).replace("0b","").rjust(8,"0")
    print(int(c,2))
    # 2进制转换
    b = bin(int(b)).replace("0b","").rjust(32,"0")
    d = [int(b[:8],2),int(b[8:16],2),int(b[16:24],2),int(b[24:32],2)]
    print(".".join(map(str,d)))
  except:
    break

发表于 2020-02-19 10:18:05 回复(2)
import re

def f1(s):
    _list = s.split('.')
    _list = ['{:0>8}'.format(bin(eval(x)).replace('0b','')) for x in _list]
    print(int(''.join(_list), 2))

def f2(s):
    s = bin(eval(s)).replace('0b','')
    s = '{:0>32}'.format(s)
    _list = re.findall('.{8}', s)
    _list = [str(int(x, 2)) for x in _list]
    print('.'.join(_list))

try:
    while True:
        f1(input())
        f2(input())
except:
    pass

发表于 2019-08-12 22:40:52 回复(0)
def IP2add(a):
    str1=a.split('.')
    str2=''
    for i in str1:
        str2+=bin(int(i))[2::].rjust(8,'0')
    return int(str2,2)

def add2IP(a):
    str2=[]
    str1 = bin(int(a))[2::].rjust(32, '0')
    for i in range(4):
        str2.append(str(int(str1[i*8:i*8+8],2)))

    return '.'.join(str2)


while True:
    try:
        a = raw_input()
        if not a.isdigit():
           print IP2add(a)
        else:print add2IP(a)



    except:
        break

发表于 2019-07-25 11:29:42 回复(0)
while True:
    try:
        a=input()
        n=input()
        b=a.split(".")
        s=int(b[0])*4096*4096+int(b[1])*256*256+int(b[2])*256+int(b[3])
        print (s)
        x=int(n)//(4096*4096)
        v=(int(n)-x*4096*4096)//(256*256)
        i=(int(n)-x*4096*4096-v*256*256)//256
        u=int(n)-x*4096*4096-v*256*256-i*256
        print ('{0}.{1}.{2}.{3}'.format(x,v,i,u))
    except:
        break
发表于 2019-05-25 20:01:37 回复(0)
def IP_To_Int(***r />     params=[int(elem) for elem in s.split('.')]
    bins=['{0:08b}'.format(elem) for elem in param***r />     int_str=''.join(bin***r />     print(int(int_str,2))

def Int_To_IP(number):
    bin_number=bin(number)[2:]
    result=[]
    while len(bin_number)>8:
        select=bin_number[-8:]
        bin_number=bin_number[:-8]
        result.insert(0,select)
    if bin_number:
        result.insert(0,bin_number)
    params=[str(int(elem,2)) for elem in result]
    print('.'.join(param***r /> while True:
    try:
        s=input()
        number=input()
        IP_To_Int(***r />         Int_To_IP(int(number))
    except:
        break
发表于 2019-05-15 23:29:17 回复(0)
while True:
    try:
        str1,str2="",""
        for i in list(map(int,input().split('.'))):
            str1+=bin(i)[2:].zfill(8)
        a=bin(int(input()))[2:]
        while(len(a)>8):
            str2+=str(int(a[len(a)-8:],2))[::-1]
            str2+='.'
            a=a[:len(a)-8]
        str2+=str(int(a.zfill(8),2))[::-1]
        print(int(str1,2))
        print(str2[::-1].strip('.'))
    except:
        break
 
发表于 2018-03-29 20:43:15 回复(0)