python - como - convertir un numero entero a decimal en c#
Convertir la cadena de número binario base-2 a int (6)
Simplemente me gustaría convertir una cadena de número binario base-2 en un int, algo como esto:
>>> ''11111111''.fromBinaryToInt()
255
¿Hay una manera de hacer esto en Python?
Si quieres 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'')
Otra forma de hacerlo es mediante el módulo de bitstring
:
>>> from bitstring import BitArray
>>> b = BitArray(bin=''11111111'')
>>> b.uint
255
Tenga en cuenta que el entero sin signo es diferente del entero con signo:
>>> b.int
-1
El módulo de bitstring
no es un requisito, pero tiene muchos métodos bitstring
para convertir la entrada en bits y de otros en otras formas, así como para manipularlos.
Simplemente escriba 0b11111111 en la interfaz interactiva de Python:
>>> 0b11111111
255
Una implementación recursiva de Python:
def int2bin(n):
return int2bin(n >> 1) + [n & 1] if n > 1 else [1]
Usar int con base es el camino correcto a seguir. Solía hacer esto antes de encontrar int también toma la base. Básicamente es una reducción aplicada en una lista de comprensión de la forma primitiva de convertir 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))])