Хотя это на самом деле не имеет значения, двоичная строка обычно означает строку, содержащую фактические двоичные данные (байт содержит две шестнадцатеричные цифры, т. Е. «\ X00» является нулевым байтом).
trevorKirkby
Ответы:
563
Вы используете встроенную intфункцию и передаете ей базу входного числа, т.е. 2для двоичного числа:
В случае, если кто-то ищет обратное: bin(255)-> '0b11111111'. Смотрите этот ответ для получения дополнительной информации.
Аксели Пален
7
Следует отметить, что это работает только для двоичных чисел без знака. Для целых чисел со знаком параметры преобразования - беспорядок.
Поддельное имя
2
Как это сделать в Python 3?
Сарас Арья
2
@SarasArya Это очень похоже! :) Я обновился, см. Выше.
расслабиться
1
И обратите внимание, что в интерактивном сеансе REPL (как предложено в >>>приглашении) вам вообще не нужно его использовать print. Гипотетический пример ОП не сделал. Так что это действительно должно быть идентично в Python 2 и 3.
Джон Y
37
Просто введите 0b11111111 в интерактивном интерфейсе Python:
Еще один способ сделать это с помощью bitstringмодуля:
>>>from bitstring importBitArray>>> b =BitArray(bin='11111111')>>> b.uint
255
Обратите внимание, что целое число без знака отличается от целого числа со знаком:
>>> b.int
-1
bitstringМодуль не является обязательным требованием, но она имеет много производительным методов превращения ввода в и из битов в другие формы, а также манипулировать ими.
Использование int с базой - верный путь. Я делал это до того, как обнаружил, что 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))])
Обратите внимание на 2 части информации, разделенных двоеточием.
Таким образом, вы можете преобразовать {двоичное, восьмеричное, шестнадцатеричное, десятичное} в {двоичное, восьмеричное, шестнадцатеричное, десятичное}, изменив правую часть двоеточия [:]
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal
:#0-> converts to decimal as above example
Попробуйте изменить левую сторону двоеточия, чтобы иметь восьмеричное / шестнадцатеричное / десятичное число.
Для больших матриц (10 ** 5 строк и выше) лучше использовать векторизованный матмат. Пройдите все ряды и столбцы одним выстрелом. Это очень быстро. Здесь нет петли в Python. Первоначально я разработал его для преобразования многих двоичных столбцов, например 0/1, для 10 столбцов разных жанров в MovieLens в одно целое число для каждой строки примера.
defBitsToIntAFast(bits):
m,n = bits.shape
a =2**np.arange(n)[::-1]# -1 reverses array of powers of 2 of same length as bitsreturn bits @ a
Ответы:
Вы используете встроенную
int
функцию и передаете ей базу входного числа, т.е.2
для двоичного числа:Вот документация для python2 и для python3 .
источник
bin(255)
->'0b11111111'
. Смотрите этот ответ для получения дополнительной информации.>>>
приглашении) вам вообще не нужно его использоватьprint
. Гипотетический пример ОП не сделал. Так что это действительно должно быть идентично в Python 2 и 3.Просто введите 0b11111111 в интерактивном интерфейсе Python:
источник
Еще один способ сделать это с помощью
bitstring
модуля:Обратите внимание, что целое число без знака отличается от целого числа со знаком:
bitstring
Модуль не является обязательным требованием, но она имеет много производительным методов превращения ввода в и из битов в другие формы, а также манипулировать ими.источник
Использование int с базой - верный путь. Я делал это до того, как обнаружил, что int принимает базу. В основном это редукция, применяемая к списковому пониманию примитивного способа преобразования двоичного числа в десятичное (например, 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)
источник
add = lambda x, y: x + y
,int.__add__
могут быть предоставлены, чтобы уменьшить. Напримерreduce(int.__add__, ...)
источник
Рекурсивная реализация Python:
источник
Двоичные в десятичные:
от бинарного до восьмеричного гекса и т. д.
Обратите внимание на 2 части информации, разделенных двоеточием.
Таким образом, вы можете преобразовать {двоичное, восьмеричное, шестнадцатеричное, десятичное} в {двоичное, восьмеричное, шестнадцатеричное, десятичное}, изменив правую часть двоеточия [:]
Попробуйте изменить левую сторону двоеточия, чтобы иметь восьмеричное / шестнадцатеричное / десятичное число.
источник
Для больших матриц (10 ** 5 строк и выше) лучше использовать векторизованный матмат. Пройдите все ряды и столбцы одним выстрелом. Это очень быстро. Здесь нет петли в Python. Первоначально я разработал его для преобразования многих двоичных столбцов, например 0/1, для 10 столбцов разных жанров в MovieLens в одно целое число для каждой строки примера.
источник