Конвертация строки с двоичным числом в int в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для преобразования двоичной строки в целое число в Python можно использовать встроенную функцию int()
, указав вторым аргументом значение 2
в качестве основания системы счисления:
decimal_int = int('1010', 2) # '1010' в двоичной системе преобразуется в десятичное число 10
Не стоит останавливаться на простых решениях. Глянем, как еще можно осуществить это преобразование.
Простые способы преобразования
В стиле Python: префикс str
Python отмечает двоичные числа префиксом '0b'
. Это позволяет явно обозначить последующую строку как двоичное число:
decimal_int = int('0b1010', 0) # '0b1010' преобразуется в число 10. Это просто и эстетично.
Шампион – bitstring
Если перед вами стоит более сложная задача чем базовое преобразование, bitstring
предоставляет на выбор множество возможностей:
from bitstring import BitArray
# Создаём BitArray из двоичной строки
binary_str = '1010'
b_array = BitArray(bin=binary_str)
# Получаем целое число из BitArray
decimal_int = b_array.uint # '1010' преобразуется в 10, выглядит стильно
Главный герой – numpy
numpy
идеально подходит при работе с массивами двоичных чисел и позволяет проводить преобразования максимально быстро и эффективно:
import numpy as np
# Преобразуем массив строк с двоичными числами в целые числа
binary_array = np.array(['1010', '1111', '0001'], dtype='S4')
decimal_array = np.core.defchararray.ljust(binary_array, 32, '0')
decimal_ints = np.packbits(decimal_array.view(np.uint8)).view(np.uint32) # Voilà! Без лишних усилий.
"Ручной" метод: zip и битовые операции
Встречаются ситуации, когда хочется усложнить задачу, и тут на выручку приходят функция zip
и битовые операции:
binary_str = '1010'
# Производим преобразование чисел, используя магию
decimal_int = sum(val * (2 ** idx) for idx, val in
zip(range(len(binary_str)), map(int, reversed(binary_str))))
Визуализация
Представьте себе ряд блоков с двоичными цифрами для лучшего понимания:
Вот как выглядят блоки двоичных чисел: 🧱1️⃣ 🧱0️⃣ 🧱1️⃣ 🧱0️⃣
Позиция блока определяет степень двойки, которой он соответствует:
- Первый блок справа – это 'единицы'
- Второй – 'двойки'
- Третий – 'четверки'
- И так далее, эффект домино 🎲
Следите за 'поездом', который достигает 'станций' десятичных чисел:
int('1010', 2)
Вот и 'станция' прибытия: 🏁 число 10 в десятичной системе
Побитовые операции и возможные ошибки
Желательно знать о побитовых операциях при выполнении преобразований, но следует быть на стороже и остерегаться ошибок:
Справочник по побитовым операциям
Побитовые операции – это специализированные манипуляции с двоичными данными:
# Операция левого сдвига умножает на 2
result = 0b1011 << 1 # Получаем 0b10110, человеческим языком – 22
# Операция правого сдвига делит на 2
result = 0b1011 >> 1 # Итак, 0b101, что равно 5 в десятичной системе
# Побитовое И применяется для маскировки битов
mask = 0b0101
result = 0b1011 & mask # И в результате получаем 0b0001, или просто 1
Нежданный гость: ValueError
Некорректные двоичные строки (например, '2021') могут привести к выключению ValueError
:
try:
# Обрабатываем исключительные ситуации с ValueError
decimal_int = int(binary_str, 2)
except ValueError:
print(f"Ошибка: некорректная двоичная строка {binary_str}. Здесь только пыль и эхо...")
Вопросы производительности
Если нужно быстрое и эффективное преобразование отдельных двоичных чисел, трудно найти что-то лучше функции int()
Pythonа. Однако при работе с большим количеством данных numpy
станет незаменимым помощником.
Полезные материалы
- Встроенные функции – документация Python 3.12.1 — Подробности о функции
int()
в документации Pythona. - Функция int() в Python — Справочник и функции
int()
. - 2. Лексический анализ – документация Python 3.12.1 — Всё об обозначении двоичной системы.
- Функция int() в Python – GeeksforGeeks — Подробности о функции
int()
. - python – Преобразование двоичной строки в целое – Stack Overflow — Ответы на популярные вопросы о преобразовании двоичных чисел.
- Побитовые операторы в Python – Real Python — Основательное руководство по побитовым операциям.