关于python:将base-2二进制数字串转换为int

Convert base-2 binary number string to int

我只想将一个以2为基数的二进制数字字符串转换成int,如下所示:

1
2
>>> '11111111'.fromBinaryToInt()
255

在python中有什么方法可以做到这一点吗?


使用内置的int函数,并将输入数的基数传递给它,即2用于二进制数:

1
2
>>> int('11111111', 2)
255

这里是关于python2和python3的文档。


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

1
2
>>> 0b11111111
    255


另一种方法是使用bitstring模块:

1
2
3
4
>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255

请注意,无符号整数与有符号整数不同:

1
2
>>> b.int
-1

bitstring模块不是必需的,但它有许多性能方法,可以将输入转换成位或从位转换成其他形式,并对其进行操作。


使用int和base是正确的方法。在我发现int也取基之前,我曾经这样做过。它基本上是对二进制转换为十进制的基本方法(例如110=2**0*0+2**1*1+2**2*1)的列表理解的简化。

1
2
add = lambda x,y : x + y
reduce(add, [int(x) * 2 ** y for x, y in zip(list(binstr), range(len(binstr) - 1, -1, -1))])


递归python实现:

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


If you wanna know what is happening behind the scene, then here you go.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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')