2012-01-19 18 views
185

me gusta simplemente para convertir una cadena número binario en base 2 en un int, algo como esto:Convertir en base 2 cuerdas número binario a int

>>> '11111111'.fromBinaryToInt() 
255 

¿Hay una manera de hacer esto en Python ?

+2

A pesar de que en realidad no importa, una cadena binaria normalmente significa una cadena que contiene datos binarios reales (un byte contiene dos dígitos hexadecimales, es decir, "\ x00" es un byte nulo). –

Respuesta

315

utiliza el incorporado en int función, y pasarlo la base del número de entrada, es decir 2 de un número binario: documentación

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

Aquí es para python2, y por python3.

+0

Gracias, exactamente lo que estaba buscando. –

+27

En caso de que alguien esté buscando lo contrario: 'bin (255)' -> ''0b11111111''. Consulte [esta respuesta] (http://stackoverflow.com/a/699892/638546) para obtener detalles adicionales. –

+5

Se debe tener en cuenta que esto solo funciona para enteros binarios sin signo. Para enteros con signo, las opciones de conversión son un desastre. –

21

Otra manera de hacer esto es mediante el uso del módulo bitstring:

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

Tenga en cuenta que el número entero sin signo es diferente del entero con signo:

>>> b.int 
-1 

El módulo bitstring no es un requisito , pero tiene muchos métodos de rendimiento para convertir la entrada en bits y convertirlos en otras formas, así como para manipularlos.

4

El uso de int con base es el camino correcto a seguir. Solía ​​hacer esto antes de encontrar int. Toma base también. Es básicamente un reducir aplica en una lista de la comprensión de la forma primitiva de la conversión de binario a decimal (por ejemplo, 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))]) 
+2

En lugar de definir 'add = lambda x, y: x + y',' int .__ add__' se puede proporcionar para reducir. P.ej. 'reduce (int .__ add__, ...)' –

21
Sólo tienes que escribir

0b11111111 en Python interfaz interactiva:

>>> 0b11111111 
    255 
1

Si usted quiere saber lo que está sucediendo detrás de la escena, entonces aquí tienes.

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