如何在Python中将6进制转换为十进制及其反向操作?
我正在尝试把一个数字从十进制转换成六进制,反过来也想做,但一直没成功。看起来我没搞清楚怎么实现这个算法。能不能帮我解释一下怎么在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