python 任意进制转换

百科知识2025-04-272

在编写信息隐藏技术的时候,需要用到进制转换,用到的思想很简单

M进制数 -> 十进制数 -> N进制数

在转换为N进制数时,需要考虑顺序是否反了

输入为数组的版本

input:

bl list类型的M进制数

M 原进制

N 目标进制

output:

res list类型的N进制数

def numMtoN_list(bl,m,n):

to dec

dec = 0
for i in bl[::]:
    dec *= m
    dec += i

# to n-nary
res = []
while(dec != 0):
    res.append(dec % n)
    dec //= n

# 逆序
res = res[::-1]
return res

输入为数值的版本

input:

num int类型的M进制数

M 原进制

N 目标进制

output:

res int类型的N进制数

def numMtoN(num,m,n):
s = list(map(int,str(num)))

dec = 0
for i in s[::]:
    dec *= m
    dec += i

# dec to N
mid = 0
while(dec != 0):
    mid *= 10
    mid += (dec % n)
    dec //= n

#逆序
res = 0
while(mid != 0):
    res *= 10
    res += (mid % 10)
    mid //= 10

return res

利用partial生成任意进制转换函数

如果我们需要自己制定一个固定的进制转换,可以利用python自带的 partial 函数生成一个固定的进制转换函数

利用 functools 模块的 partial 函数,可以生成任意进制转换函数

import functools

生成5进制转2进制

num5to2_list = functools.partial(numMtoN_list,m=5,n=2)

输出结果

data = [1,1,4]
res = numMtoN_list(data,5,2)

res = num5to2_list(data,5,2) # 效果相同

res = [1, 0, 0, 0, 1, 0]

numMtoN(114,10,5)
424