У меня ABC123EFFF.
Я хочу иметь 001010101111000001001000111110111111111111 (т.е. двоичное представление, скажем, с 42 цифрами и ведущими нулями).
Как?
Для решения левой задачи конечного нуля:
my_hexdata = "1a"
scale = 16 ## equals to hexadecimal
num_of_bits = 8
bin(int(my_hexdata, scale))[2:].zfill(num_of_bits)
Вместо урезанной версии будет 00011010.
len(my_hexdata) * log2(scale)
.Читать
binascii.unhexlify
Возвращает двоичные данные, представленные шестнадцатеричной строкой, указанной в качестве параметра.
источник
источник
Короткий ответ:
Новые f-строки в Python 3.6 позволяют делать это с использованием очень краткого синтаксиса:
или разбить это на семантику:
Длинный ответ:
На самом деле вы говорите, что у вас есть значение в шестнадцатеричном представлении, и вы хотите представить эквивалентное значение в двоичном.
Значение эквивалентности - целое число. Но вы можете начать со строки, а для просмотра в двоичном формате вы должны заканчивать строкой.
Преобразовать шестнадцатеричное в двоичное, 42 цифры и ведущие нули?
У нас есть несколько способов достичь этой цели напрямую, без использования срезов.
Во-первых, прежде чем мы вообще сможем выполнять какие-либо двоичные манипуляции, преобразуйте его в int (я предполагаю, что это в строковом формате, а не как литерал):
в качестве альтернативы мы могли бы использовать целочисленный литерал, выраженный в шестнадцатеричной форме:
Теперь нам нужно выразить наше целое число в двоичном представлении.
Используйте встроенную функцию,
format
Затем перейдите к
format
:При этом используется мини-язык спецификации форматирования. .
Вот грамматическая форма этого:
Чтобы внести это в спецификацию для наших нужд, мы просто исключаем то, что нам не нужно:
и просто передайте это в формат
Форматирование строк (шаблоны) с помощью
str.format
Мы можем использовать это в строке, используя
str.format
метод:Или просто поместите спецификацию прямо в исходную строку:
Форматирование строк с помощью новых f-строк
Продемонстрируем новые струны фа. Они используют те же правила форматирования мини-языка:
Теперь давайте поместим эту функциональность в функцию, чтобы стимулировать повторное использование:
И сейчас:
В стороне
Если вы на самом деле просто хотели кодировать данные в виде строки байтов в памяти или на диске, вы можете использовать
int.to_bytes
метод, который доступен только в Python 3:А поскольку 42 бита, разделенные на 8 бит на байт, равны 6 байтам:
источник
'0b1010101111000001001000111110111111111111'
источник
источник
Вот довольно простой способ сделать это, используя битовую игру для генерации двоичных строк.
Ключевой момент, который нужно понять:
Что будет генерировать либо 0, либо 1, если установлен i-й бит n.
Изменить: используя "новый" тернарный оператор:
Станет:
(Какой TBH я не уверен, насколько это читаемо)
источник
01111001
11111110
.Это небольшое изменение решения Глена Мейнарда, и я думаю, что это правильный способ сделать это. Он просто добавляет элемент заполнения.
Вытащил из класса. Просто уберите,
self,
если вы работаете в автономном скрипте.источник
Использование встроенной функции формата () и Int () функцию Это просто и легко понять. Это немного упрощенная версия ответа Аарона
int ()
формат()
пример
См. Также этот ответ
источник
Замените каждую шестнадцатеричную цифру соответствующими 4 двоичными цифрами:
источник
шестнадцатеричный -> десятичный, затем десятичный -> двоичный
источник
По-другому:
источник
Я добавил расчет количества бит для заполнения в решение Онединкенеди. Вот итоговая функция:
Где 16 - это основание, из которого вы конвертируете (шестнадцатеричное), а 4 - это количество бит, которое вам нужно для представления каждой цифры, или логарифмическая база 2 шкалы.
источник
источник
у меня есть короткая оборванная надежда, которая помогает :-)
Сначала я использую ваш ввод и перечисляю его, чтобы получить каждый символ. затем я конвертирую его в двоичный и обрезаю от 3-й позиции до конца. Уловка для получения 0 состоит в том, чтобы добавить максимальное значение ввода -> в этом случае всегда 16 :-)
краткая форма - это метод соединения. Наслаждаться.
источник
источник
Двоичная версия ABC123EFFF на самом деле 1010101111000001001000111110111111111111
Почти для всех приложений вы хотите, чтобы двоичная версия имела длину, кратную 4, с начальным заполнением нулей.
Чтобы получить это в Python:
Пример 1:
Пример 2:
Обратите внимание, что это также работает в Micropython :)
источник
Просто используйте код модуля (примечание: я являюсь автором модуля)
Здесь вы можете преобразовать шестнадцатеричный код в двоичный.
Конвертирующие ключевые слова:
Таким образом, вы также можете форматировать: e. шестнадцатеричный_выход = bin_to_hex (a_binary_number)
источник
HEX_TO_BINARY_CONVERSION_TABLE = {'0': '0000',
источник
источник
источник
источник