如何在Python中将6进制转换为十进制及其反向操作?

-1 投票
2 回答
7309 浏览
提问于 2025-04-18 01:18

我正在尝试把一个数字从十进制转换成六进制,反过来也想做,但一直没成功。看起来我没搞清楚怎么实现这个算法。能不能帮我解释一下怎么在Python中实现这个功能?

这里有一个链接(点击这里),里面有关于怎么做的解释。但是当我试着用while循环在Python中实现时,结果却变成了一个无限循环。最后,我也不明白怎么把所有的余数拼接在一起,形成最终的值。

谢谢

2 个回答

1

有一个方向是明确的:

>>> int('42', 6)
26

另一种方法 - 将一个数字转换为6进制表示 - 就比较复杂了。似乎没有内置的函数可以做到这一点,而且还不能不使用循环。

所以可以做一些类似这样的事情:

def str_base(val, base):
    res = ''
    while val > 0:
        res = str(val % base) + res
        # val /= base # only valid for Py2
        val //= base # for getting integer division
    if res: return res
    return '0'

这样做会得到例如:

>>> str_base(7,6)
'11'

到目前为止,这个方法只适用于小于等于10的进制;对于其他进制,你需要定义一个字母表字符串:

import string
alphabet = string.digits + string.ascii_lowercase

然后在函数中像这样使用它:

res = alphabet[val % base] + res

不过,它(可能)仍然不支持负数。如果你需要处理负数,就得再多花点功夫。

2

我希望这能对你更有帮助

def dec2hex(num):
    if num == 0:
        return 0
    ans = ""
    while num > 0:
        ans = str(num%6) + ans
        num /= 6
    return int(ans)

def hex2dec(num):
    if num == 0:
        return 0
    num = str(num)
    ans = int(num[0])
    for i in num[1:]:
        ans *= 6
        ans += int(i)
    return ans

if __name__ == '__main__':
    a = dec2hex(78)
    b = hex2dec(a)
    print a, b

输出结果是:

210 78

撰写回答