需求

将一个数字 从任意进制 转换为 任意进制 的数值。

实现

Python2


def baseconvert(number, fromdigits, todigits):
    if str(number)[0] == '-':
        number = str(number)[1:]
        neg = 1
    else:
        neg = 0
    # make an integer out of the number
    x = long(0)

    for digit in str(number):
        x = x*len(fromdigits) + fromdigits.index(digit)

    # create the result in base 'len(todigits)'
    res = ""
    while x > 0:
        digit = x % len(todigits)
        res = todigits[digit] + res
        x /= len(todigits)
    if neg:
        res = "-"+res
    return res

//将8从10进制转为二进制
print(baseconvert(8, "0123456789","01"))
//将100从10进制转为八进制
print(baseconvert(100, "0123456789","01234567"))

Python3

需要修改x = long(0)x=0
原因:Python3.x中没有long类型,只有int类型。

同时修改x /= len(todigits)x //= len(todigits)
原因:python3使用//作为整除符号