Convert base-2 binary number string to int

2019-01-01 02:13发布

问题:

I\'d simply like to convert a base-2 binary number string into an int, something like this:

>>> \'11111111\'.fromBinaryToInt()
255

Is there a way to do this in Python?

回答1:

You use the built-in int function, and pass it the base of the input number, i.e. 2 for a binary number:

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

Here is documentation for python2, and for python3.



回答2:

Just type 0b11111111 in python interactive interface:

>>> 0b11111111
    255


回答3:

Another way to do this is by using the bitstring module:

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

Note that the unsigned integer is different from the signed integer:

>>> b.int
-1

The bitstring module isn\'t a requirement, but it has lots of performant methods for turning input into and from bits into other forms, as well as manipulating them.



回答4:

Using int with base is the right way to go. I used to do this before I found int takes base also. It is basically a reduce applied on a list comprehension of the primitive way of converting binary to decimal ( e.g. 110 = 2**0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)

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


回答5:

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

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


回答6:

A recursive Python implementation:

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


标签: python