Преобразовать строку двоичных чисел base-2 в int - PullRequest
246 голосов
/ 19 января 2012

Я просто хотел бы преобразовать строку двоичных чисел с основанием 2 в целое число, что-то вроде этого:

>>> '11111111'.fromBinaryToInt()
255

Есть ли способ сделать это в Python?

Ответы [ 6 ]

459 голосов
/ 19 января 2012

Вы используете встроенную функцию int и передаете ей базу входного числа, т.е. 2 для двоичного числа:

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

Вот документация для python2 и для python3 .

29 голосов
/ 27 января 2015

Просто введите 0b11111111 в интерактивном интерфейсе Python:

>>> 0b11111111
    255
25 голосов
/ 19 января 2012

Другой способ сделать это - использовать модуль bitstring:

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

Обратите внимание, что целое число без знака отличается от целого числа со знаком:

>>> b.int
-1

Модуль bitstring не является обязательным, но в нем есть много эффективных методов для преобразования ввода в биты и из них в другие формы, а также для манипулирования ими.

7 голосов
/ 08 мая 2013

Использование int с base - верный путь.Я делал это до того, как обнаружил, что int принимает базу.В основном это редукция, применяемая к пониманию списка примитивного способа преобразования двоичного в десятичное (например, 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))])
3 голосов
/ 23 марта 2018

Рекурсивная реализация Python:

def int2bin(n):
    return int2bin(n >> 1) + [n & 1] if n > 1 else [1] 
3 голосов
/ 16 ноября 2016

Если вы хотите знать, что происходит за кулисами, тогда вот, пожалуйста.

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...