当我们需要进行数据转换的时候,经常会用到进制转换。在Python中,实现进制转换可以使用内置函数bin()
、oct()
、hex()
。但是这些函数只能转换二进制、八进制、十六进制,如果需要进行其他进制转换,就需要自己实现。
以下是Python实现基本进制转换的方法:
十进制转其他进制
十进制数转二进制、八进制和十六进制都比较简单,可以通过内置函数实现。这里主要介绍如何实现十进制转任意进制。
基本思路是:将十进制数从右往左不断地除以目标进制,除数的余数即为转换后的相应位的值,继续对商进行上述操作。直到商为0时,结束循环。将余数倒序排列即为转换后的结果。
代码实现如下:
def decimal_to_base(number, base):
"""
将十进制数转化为任意进制
:param number: 待转换的十进制数
:param base: 目标进制
:return: 转换后的结果
"""
if not isinstance(number, int):
return None
if not isinstance(base, int) or base < 2 or base > 36:
return None
digit_map = "0123456789abcdefghijklmnopqrstuvwxyz"
if number == 0:
return '0'
result = ''
while number > 0:
number, index = divmod(number, base)
result += digit_map[index]
return result[::-1]
接下来看两个示例说明。
示例一:将十进制数23转换为二进制
调用函数decimal_to_base(23, 2)
,得到结果为'10111'。
>>> decimal_to_base(23, 2)
'10111'
示例二:将十进制数923转换为十七进制
调用函数decimal_to_base(923, 17)
,得到结果为'3a1'。
>>> decimal_to_base(923, 17)
'3a1'
其他进制转十进制
其他进制转十进制也是分别对每一位进行计算,将结果相加。以十六进制为例,每一位的权重为16的指数次幂,从右到左依次是16^0、16^1、16^2...。
代码实现如下:
def base_to_decimal(number, base):
"""
将任意进制转换为十进制
:param number: 待转换的数
:param base: 数的进制
:return: 转换后的结果
"""
if not isinstance(number, str):
return None
if not isinstance(base, int) or base < 2 or base > 36:
return None
digit_map = "0123456789abcdefghijklmnopqrstuvwxyz"
number = number.lower()[::-1]
length = len(number)
result = 0
for i in range(length):
index = digit_map.index(number[i])
if index < 0 or index >= base:
return None
result += index * (base ** i)
return result
接下来看两个示例说明。
示例一:将二进制数10111转换为十进制
调用函数base_to_decimal('10111', 2)
,得到结果为23。
>>> base_to_decimal('10111', 2)
23
示例二:将十八进制数1af转换为十进制
调用函数base_to_decimal('1af', 18)
,得到结果为363。
>>> base_to_decimal('1af', 18)
363
以上是Python实现基本进制转换的方法和示例说明,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现基本进制转换的方法 - Python技术站