Python为我们提供了强大的内置函数和格式化数字的方法去实现进制转换的功能,下面一一介绍。
先将所有的函数罗列出来,如下:
↓ | 2进制 | 8进制 | 10进制 | 16进制 |
2进制 | - | bin(int(n,8)) | bin(int(n,10)) | bin(int(n,16)) |
8进制 | oct(int(n,2)) | - | oct(int(n,10)) | oct(int(n,16)) |
10进制 | int(n,2) | int(n,8) | - | int(n,16) |
16进制 | hex(int(n,2)) | hex(int(n,8)) | hex(int(n,10)) | - |
原理:python内置函数进行进制转换的原理是将读入的一个字符串(python默认读入的都是字符串形式)转为10进制,然后再用相关函数进行其他进制转换
下面来逐一介绍每个函数的具体使用方法:
2进制转换成其他进制:
2进制转换成8进制:oct(int(n,2))
n=input()
print(oct(int(n,2)))
输入: 1010
输出: 0o12
2进制转换成10进制:int(n,2)
n=input()
print(int(n,2))
输入:1010
输出:10
2进制转换成16进制:hex(int(n,2))
n=input()
print(hex(int(n,2)))
输入:1010
输出:0xa
8进制转换成其他进制:
8进制转换成2进制:bin(int(n,8))
n=input()
print(bin(int(n,8)))
输入:1010
输出:0b1000001000
8进制转换成10进制:int(n,8)
n=input()
print(int(n,8))
输入:1010
输出:520
8进制转换成16进制:hex(int(n,16))
n=input()
print(hex(int(n,8)))
输入:1010
输出:0x208
10进制转换成其他进制:
说明:10进制转换可以直接采取上述表格中的形式,读入字符串,先转换为10进制的数,再用函数进行操作转换成其他进制。
但同时可以这样操作,读入的时候直接进行强制类型转换操作,转为int类型(python中的int类型的数据就是10进制)
10进制转换成2进制:bin(n)
n=int(input())
print(bin(n))
输入:10
输出:0b1010
10进制转换成8进制:oct(n)
n=int(input())
print(oct(n))
输入:10
输出:0o12
10进制转换成16进制:hex(n)
n=int(input())
print(hex(n))
输入:10
输出:0xa
16进制转换成其他进制:
16进制转换成2进制:bin(int(n,16))
n=input()
print(bin(int(n,16)))
输入:a
输出:0b1010
16进制转换成8进制:oct(int(n,16))
n=input()
print(oct(int(n,16)))
输入:a
输出:0o12
16进制转换成10进制:int(n,16)
n=input()
print((int(n,16)))
输入:a
输出:10
注意:我们可以发现,除了转换成10进制的数,其他的进制转换结果都带有前缀,2进制是0b,8进制是0o,16进制是0x。但是我们在绝大部分使用进制转换后的数据时,是不需要它的前缀的。所以笔者这里介绍两种方法,去掉它的前缀。
方法一:使用字符串切片操作
原理:就是将进制转换后得到的结果对其进行字符串切片操作,将得到的结果从第三个字符开始取结果即可,这样我们可以得到不带前缀的结果
举例:
//10进制转换成2进制
n=int(input())
print(bin(n)[2:])//切片操作
输入:10
输出:1010
//10进制转换成8进制
n=int(input())
print(oct(n)[2:])//切片操作
输入:10
输出:12
//10进制转换成16进制
n=int(input())
print(hex(n)[2:])//切片操作
输入:10
输出:a
笔者这里以10进制转换其他进制进行了举例,其他的情况类比即可。
方法二:使用format函数进行格式化数字操作
说明:首先,笔者在前面说过,不同类型的进制转换的原理时先转换为十进制,然后再用相关的函数进行禁止转换操作,而format函数里面有格式化数字的方法可以直接实现进制转换的功能,下面一一介绍:
其他类型转换为2进制:
操作:在format函数的槽中添加一个b 即可实现其他类型对2进制的转换,下面举例说明
n=input()
print("{:b}".format(int(n,8)))
//先将8进制的数转换为10进制,
//然后在format的槽中添加一个b,等价于实现了bin函数的功能
//但是此结果是不带有0b前缀的
输入:1010
输出:1000001000
其他类型转换为8进制:
操作:在format函数的槽中添加一个o 即可实现其他类型对8进制的转换,下面举例说明
n=input()
print("{:o}".format(int(n,16)))
//先将一个16进制数转换为10进制
//然后利用format函数格式化数字方法转换即可
输入:a
输出:12
其他类型转换为16进制:
操作:在format函数的槽中添加一个x 即可实现其他类型对2进制的转换,下面举例说明
n=input()
print("{:x}".format(int(n,8)))
//先将一个8进制的数转换为16进制
//然后原理同上
输入:1010
输出:208
注意:由于转换成10进制本来就是不带前缀的,无需用format格式化数字方法控制