python3中内置了数字进制转换的模块,各位读者可以放心食用。本次教程将讲解如何使用python实现十进制到二进制,八进制,十六进制的转换。
教程篇
- 十进制转二进制
bin 函数官方讲解:
Help on built-in function bin in module builtins:
bin(number, /)
Return the binary representation of an integer.
>>> bin(2796202)
'0b1010101010101010101010'
实际上是说给Bin函数传递一个数字后,将会将转换后的二进制数字作为返回值弹出
举例:
>>> print (bin(10))
0b1010
得到了十进制数字10的二进制值为1010
- 十进制转八进制
oct 函数官方讲解:
Help on built-in function oct in module builtins:
oct(number, /)
Return the octal representation of an integer.
>>> oct(342391)
'0o1234567'
实际上是说给Oct函数传递一个十进制数字后,会将处理的得到的八进制数字作为返回值弹出
举例:
>>> print (oct(10))
0o12
得到了十进制数字10的八进制值为012
- 十进制转十六进制
hex 函数官方讲解:
Help on built-in function hex in module builtins:
hex(number, /)
Return the hexadecimal representation of an integer.
>>> hex(12648430)
'0xc0ffee'
实际上是说给Hex函数传递一个数字后,会将转换得到的十六进制数据以返回值的形式弹出
举例:
>>> print (hex(10))
0xa
得到了十进制数字10转换的十六进制数据0xa
- 反向转换
int(‘value’,base=n)
n是几,就是几进制转10进制。注意,value必须是字符串类型。举例:
1. 二进制转10进制
>>> int('10010010',base=2)
146
2. 八进制转10进制
>>> int('0o222',base=8)
146
3. 十六进制转10进制
>>> int('0x92',base=16)
146
实战篇
上面的内容中我们讲解了10进制与二进制,八进制,十六进制之间的转换。
下面我们使用这些内容做一些小实验
- 子网掩码转换
要求用户输入子网掩码的位数,程序自动计算该掩码长度对应的子网掩码
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年6月15日
#获取掩码长度
mask = int(input("请输入子网掩码位数:"))
#计算子网掩码的二进制值
bin_mask = "{:0<32}".format('1' * mask)
#分割掩码
bin_mask_list = [bin_mask[0:8],bin_mask[8:16],bin_mask[16:24],bin_mask[24:32]]
#计算掩码的十进制值
ten_mask = ''
for value in bin_mask_list:
ten_mask += '{}.'.format(int(value,base=2))
#打印结果
print ("掩码长度{}对应的子网掩码是{}".format(mask,ten_mask.rstrip('.')))
- 网络位,广播位计算
要求用户输入ip地址和掩码长度,即可自动计算出当前网络的网络地址和广播地址
# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年6月15日
#获取IP和掩码
ip_address = input("请输入IP地址和掩码长度(格式:IP地址/掩码长度):")
ip,mask =ip_address.split('/')
#将IP转换为2进制数据
src_bin_ip = ''
for value in ip.split('.'):
src_bin_ip += "{:0>8}".format(bin(int(value)).replace('0b',''))
#计算IP网段的二进制数据
bin_net = "{:0<32}".format(src_bin_ip[:int(mask)])
#计算IP广播的二进制数据
bin_bro = "{:1<32}".format(src_bin_ip[:int(mask)])
#计算IP网段的十进制数据
bin_net_list = [bin_net[0:8],bin_net[8:16],bin_net[16:24],bin_net[24:32]]
ten_net = ''
for value in bin_net_list:
ten_net += "{}.".format(int(value,2))
#计算IP广播的十进制数据
bin_bro_list = [bin_bro[0:8],bin_bro[8:16],bin_bro[16:24],bin_bro[24:32]]
ten_bro = ''
for value in bin_bro_list:
ten_bro += "{}.".format(int(value,2))
#打印结果:
print ("该IP的网络地址是:{},广播地址是:{}".format(ten_net.rstrip('.'),ten_bro.rstrip('.')))