我只是想把一个以2为基数的二进制数字字符串转换成一个int型,就像这样:

>>> '11111111'.fromBinaryToInt()
255

在Python中有办法做到这一点吗?


当前回答

下面是另一种简洁的方法,上面的答案中没有提到:

>>> eval('0b' + '11111111')
255

不可否认,它可能不是很快,如果字符串来自您无法控制的东西,可能是恶意的(比如用户输入),这是一个非常非常糟糕的主意,但为了完整性,它确实有效。

其他回答

如果您正在使用python3.6或更高版本,则可以使用f-string来执行 转换:

二进制到十进制:

>>> print(f'{0b1011010:#0}')
90

>>> bin_2_decimal = int(f'{0b1011010:#0}')
>>> bin_2_decimal
90

二进制到八进制到六进制等等。

>>> f'{0b1011010:#o}'
'0o132'  # octal

>>> f'{0b1011010:#x}'
'0x5a'   # hexadecimal

>>> f'{0b1011010:#0}'
'90'     # decimal

注意用冒号分隔的两条信息。

这样,通过更改冒号[:]右侧,可以在{二进制,八进制,十六进制,十进制}之间转换为{二进制,八进制,十六进制,十进制}

:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal 
:#0 -> converts to decimal as above example

试着把冒号的左边改成八进制/十六进制/十进制。

递归Python实现:

def int2bin(n):
    return int2bin(n >> 1) + [n & 1] if n > 1 else [1] 

如果你想知道幕后发生了什么,那就给你。

class Binary():
    def __init__(self, binNumber):
        self._binNumber = binNumber
        self._binNumber = self._binNumber[::-1]
        self._binNumber = list(self._binNumber)
        self._x = [1]
        self._count = 1
        self._change = 2
        self._amount = 0
        print(self._ToNumber(self._binNumber))
    def _ToNumber(self, number):
        self._number = number
        for i in range (1, len (self._number)):
            self._total = self._count * self._change
            self._count = self._total
            self._x.append(self._count)
        self._deep = zip(self._number, self._x)
        for self._k, self._v in self._deep:
            if self._k == '1':
                self._amount += self._v
        return self._amount

mo = Binary('101111110')

下面是另一种简洁的方法,上面的答案中没有提到:

>>> eval('0b' + '11111111')
255

不可否认,它可能不是很快,如果字符串来自您无法控制的东西,可能是恶意的(比如用户输入),这是一个非常非常糟糕的主意,但为了完整性,它确实有效。

只需在python交互界面中输入0b11111111:

>>> 0b11111111
    255