Конвертация строки с двоичным числом в int в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для преобразования двоичной строки в целое число в Python можно использовать встроенную функцию int(), указав вторым аргументом значение 2 в качестве основания системы счисления:

Python
Скопировать код
decimal_int = int('1010', 2)  # '1010' в двоичной системе преобразуется в десятичное число 10

Не стоит останавливаться на простых решениях. Глянем, как еще можно осуществить это преобразование.

Кинга Идем в IT: пошаговый план для смены профессии

Простые способы преобразования

В стиле Python: префикс str

Python отмечает двоичные числа префиксом '0b'. Это позволяет явно обозначить последующую строку как двоичное число:

Python
Скопировать код
decimal_int = int('0b1010', 0)  # '0b1010' преобразуется в число 10. Это просто и эстетично.

Шампион – bitstring

Если перед вами стоит более сложная задача чем базовое преобразование, bitstring предоставляет на выбор множество возможностей:

Python
Скопировать код
from bitstring import BitArray

# Создаём BitArray из двоичной строки
binary_str = '1010'
b_array = BitArray(bin=binary_str)

# Получаем целое число из BitArray
decimal_int = b_array.uint  # '1010' преобразуется в 10, выглядит стильно

Главный герой – numpy

numpy идеально подходит при работе с массивами двоичных чисел и позволяет проводить преобразования максимально быстро и эффективно:

Python
Скопировать код
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 и битовые операции:

Python
Скопировать код
binary_str = '1010'
# Производим преобразование чисел, используя магию
decimal_int = sum(val * (2 ** idx) for idx, val in 
                  zip(range(len(binary_str)), map(int, reversed(binary_str))))

Визуализация

Представьте себе ряд блоков с двоичными цифрами для лучшего понимания:

Markdown
Скопировать код
Вот как выглядят блоки двоичных чисел: 🧱1️⃣ 🧱0️⃣ 🧱1️⃣ 🧱0️⃣

Позиция блока определяет степень двойки, которой он соответствует:
- Первый блок справа – это 'единицы'
- Второй – 'двойки'
- Третий – 'четверки'
- И так далее, эффект домино 🎲

Следите за 'поездом', который достигает 'станций' десятичных чисел:
Python
Скопировать код
int('1010', 2)
Markdown
Скопировать код
Вот и 'станция' прибытия: 🏁 число 10 в десятичной системе

Побитовые операции и возможные ошибки

Желательно знать о побитовых операциях при выполнении преобразований, но следует быть на стороже и остерегаться ошибок:

Справочник по побитовым операциям

Побитовые операции – это специализированные манипуляции с двоичными данными:

Python
Скопировать код
# Операция левого сдвига умножает на 2
result = 0b1011 << 1  # Получаем 0b10110, человеческим языком – 22

# Операция правого сдвига делит на 2
result = 0b1011 >> 1  # Итак, 0b101, что равно 5 в десятичной системе

# Побитовое И применяется для маскировки битов
mask = 0b0101
result = 0b1011 & mask  # И в результате получаем 0b0001, или просто 1

Нежданный гость: ValueError

Некорректные двоичные строки (например, '2021') могут привести к выключению ValueError:

Python
Скопировать код
try:
    # Обрабатываем исключительные ситуации с ValueError
    decimal_int = int(binary_str, 2)
except ValueError:
    print(f"Ошибка: некорректная двоичная строка {binary_str}. Здесь только пыль и эхо...")

Вопросы производительности

Если нужно быстрое и эффективное преобразование отдельных двоичных чисел, трудно найти что-то лучше функции int() Pythonа. Однако при работе с большим количеством данных numpy станет незаменимым помощником.

Полезные материалы

  1. Встроенные функции – документация Python 3.12.1 — Подробности о функции int() в документации Pythona.
  2. Функция int() в Python — Справочник и функции int().
  3. 2. Лексический анализ – документация Python 3.12.1 — Всё об обозначении двоичной системы.
  4. Функция int() в Python – GeeksforGeeks — Подробности о функции int().
  5. python – Преобразование двоичной строки в целое – Stack Overflow — Ответы на популярные вопросы о преобразовании двоичных чисел.
  6. Побитовые операторы в Python – Real Python — Основательное руководство по побитовым операциям.