练习题-如何将IP地址转换成为一个整数以及十进制及其他进制之间的转化

1、XX转化为10进制int(x,2)-bin,oct,hex

"""
9、通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
十进制转换成二进制:v = 18
八进制转换成十进制:v = “011”
十进制转换成八进制:v = 30
十六进制转换成十进制:v = “0x12”
十进制转换成十六进制:v = 87
"""

a = int("0b1111011", 2)
b = bin(18)

# 八进制转换成十进制:v = “011”
# 十进制转换成八进制:v = 30
c = int("011", 8)
d = oct(30)

# 十六进制转换成十进制:v = “0x12”
# 十进制转换成十六进制:v = 87
e = int("0x12", 16)
f = hex(87)

2、如何将IP地址转换成为一个整数

请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为: ---分割 split

 10           00001010
 3            00000011
 9            00001001
 12           00001100 -- 位移或者补齐 str.rjust(width[, fillchar])
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ? --  int 将2进制转为十进制  int(x,2)
"""
10、请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

 10           00001010
 3            00000011
 9            00001001
 12           00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

"""


#  rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
# str.rjust(width[, fillchar])
# width -- 指定填充指定字符后中字符串的总长度.
# fillchar -- 填充的字符,默认为空格
# 语法
def ipfunc(ip):
    a = ip.split('.')
    s = ''
    l = []
    for i in a:
        i = bin(int(i))[2:]
        i = i.rjust(8, '0')
        l.append(i)
    s = s.join(l)
    return s


# 通过位移的方式
def v1(addr):
    # 取每个数
    id = [int(x) for x in addr.split(".")]
    print(id)
    sum = 0
    for i in range(4):
        c = (id[i] << [24, 16, 8, 0][i])
        sum += c
    # return sum(id[i] << [24, 16, 8, 0][i] for i in range(4))
    return sum


if __name__ == '__main__':
    c = v1("10.21.21.21")
    d = ipfunc("10.21.21.21")
    print(c)
    print(int(d, 2))
  
原文地址:https://www.cnblogs.com/shishibuwan/p/12747238.html