1. 很多情况下需要进行不同进制之间的转换
其中比较常用到的是python的内置函数进行进制的转换,一般使用内置函数进行转换的时候是先将控制台输入的字符串或者是自定义的字符串先转换为10进制然后将10进制转换为其他的进制,常见的是二进制、十进制、八进制、十六进制之间的转换,其中遵循一个原则是:
其他进制转为十进制使用int函数,其他进制转为二进制使用bin函数,其他进制转为八进制使用oct函数,其他进制转为十六进制转为hex函数,并且是借助于10进制作为中间的桥梁进行转换,也就是使用到int()函数,
下面的表格反应了常见进制之间的转换
并且转换为对应的权重之后对应的字符串会有相应的前缀,二进制前缀为0b,八进制前缀为0o,十六进制前缀为0x
2进制 | 8进制 | 10进制 | 16进制 | |
2进制 | - | bin(int(input(),8)) | bin(int(input(),10)) | bin(int(input(),16)) |
8进制 | oct(int(input(), 2)) | - | oct(int(input(),10)) | oct(int(input(),16)) |
10进制 | int(input(),2)) | int(input(),8) | - | int(input(),2) |
16进制 | hex(int(input(), 2)) | hex(int(input(),8)) | hex(int(input(),10)) | - |
使用内置函数的时候反正是转换为哪一个进制就使用一个进制对应的函数即可,中间需要先转换为十进制(int()函数),其中进制转换涉及到的内置函数有:2进制:bin(),8进制:oct(),10进制:int(),16进制:hex()
1
2
3
4
5
6
|
if __name__ = = '__main__' : # input接收到的是字符串, 使用int函数定义输入的是什么进制的字符串转换为10进制数字 print ( bin ( int ( input (), 16 ))) print ( int ( input (), 10 )) print ( oct ( int ( input (), 10 ))) print ( hex ( int ( input (), 10 ))) |
2. 第二种是使用format函数进行转换
在format中加上b,o,x将其他进制的转换为二进制、八进制或者是十六进制
1
2
3
4
|
if __name__ = = '__main__' : print ( "{:b}" . format ( int ( input (), 8 ))) print ( "{:o}" . format ( int ( input (), 8 ))) print ( "{:x}" . format ( int ( input (), 8 ))) |
3. 手动转化
10进制转换为其他进制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Solution: # 将十进制数字转换为任意的进制(1-16) def decimalToAny( self , decimal: int , x: int ): remainder = [ "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "A" , "B" , "C" , "D" , "E" , "F" ] # 当n大于0的时候执行循环 res = "" while decimal: res = remainder[decimal % x] + res decimal / / = x return res if __name__ = = '__main__' : decimal, x = map ( int , input ().split()) print (Solution().decimalToAny(decimal, x)) |
其他的进制转为10进制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
class Solution: # 快速幂: x ** n def quickPower( self , x: int , n: int ): res = 1 while n > 0 : if n % 2 = = 1 : res * = x x * = x n / / = 2 return res def anyToDecimal( self , s: str , base: int ): n = len (s) res = 0 for i in range (n): # 数字, ord函数获取字母的ascii值 if "0" < = s[i] < = "9" : res + = ( ord (s[i]) - ord ( "0" )) * self .quickPower(base, n - i - 1 ) # 16进制数字对应的权重 elif "a" < = s[i] < = "f" : res + = ( ord (s[i]) - ord ( "a" ) + 10 ) * self .quickPower(base, n - i - 1 ) else : res + = ( ord (s[i]) - ord ( "A" ) + 10 ) * self .quickPower(base, n - i - 1 ) return res if __name__ = = '__main__' : li = input ().split() print (Solution().anyToDecimal(li[ 0 ], int (li[ 1 ]))) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_39445165/article/details/114539697