在Python 3中编写函数将base 16转换为base 10

时间:2014-03-25 01:17:27

标签: python-3.x

是否有一种简单的方法可以修改此代码,该代码从base 2转换为base 10,以便将base 16转换为base 10?我的目标是构建一个专用的转换函数,而不是使用任何内置的Python函数进行计算。感谢

BinaryVal = int(input('Enter:')
DecVal = 0
for n in range(len(str(BinaryVal))):
    Power = len(str(BinX))-(n+1)
    DecVal += int(str(BinaryVal)[n])*(2**Power)
print(DecVal)

3 个答案:

答案 0 :(得分:3)

让人惊讶。

int已经可以从任何基数转换为基数10 - 只需将其作为第二个参数提供。

int('101010',2)
Out[64]: 42

int('2A',16)
Out[66]: 42

答案 1 :(得分:1)

将十六进制字符串转换为int

>>> hexstr = '101010'
>>> int(hexstr, 16)
1052688

相同 - 没有int构造函数:

>>> import binascii 
>>> int.from_bytes(binascii.unhexlify(hexstr), 'big')
1052688

相同 - 类似于@SzieberthAdam's answer

>>> hex2dec = {d: i for i, d in enumerate('0123456789abcdef')}
>>> sum(hex2dec[h] * 16**pos for pos, h in enumerate(reversed(hexstr.lower())))
1052688

或:

>>> from functools import reduce
>>> reduce(lambda n, h: n*16 + hex2dec[h], hexstr.lower(), 0)
1052688

相当于:

def hex2int(hexstr):
    n = 0
    for h in hexstr.lower():
        n = n*16 + hex2dec[h]
    return n

示例:

>>> hex2int('101010')
1052688

作为替代方案,可以先将所有数字转换为int

>>> reduce(lambda n, d: n*16 + d, map(hex2dec.get, hexstr.lower()))
1052688

它为空字符串引发TypeError

答案 2 :(得分:0)

那么,你去吧:

>>> binary_num = '101010'
>>> sum(int(b)*2**i for i, b in enumerate(reversed(binary_num)))
42