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

>>> '11111111'.fromBinaryToInt()
255

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


当前回答

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

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')

其他回答

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

>>> 0b11111111
    255

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

>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255

注意无符号整数不同于有符号整数:

>>> b.int
-1

bitstring模块不是必需的,但它有许多性能方法,用于将输入转换为比特或将比特转换为其他形式,以及操作它们。

递归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')

对于大型矩阵(10**5行以上),最好使用向量化matmult。在一次射击中通过所有的排和cols。它非常快。这里python中没有循环。我最初设计它是为了将MovieLens中10个不同类型列的二进制列(如0/1)转换为单个整数。

def BitsToIntAFast(bits):
  m,n = bits.shape
  a = 2**np.arange(n)[::-1]  # -1 reverses array of powers of 2 of same length as bits
  return bits @ a