2013-08-22 2 views
2

Я использую Python 3.2.2.Преобразование двоичной строки в двоичный литерал

Я ищу функцию, которая преобразует двоичную строку, например. '0b1010' или '1010', в бинарный литерал, например. 0b1010 (не строка или десятичный целочисленный литерал).

Непросто, но я предпочитаю использовать стандартную функцию или хорошо зарекомендовавшую себя: я не хочу «изобретать колесо».

Независимо от того, я счастлив посмотреть на любые эффективные алгоритмы, которые могут быть у вас.

ответ

2

Строка является буквально.

3>> bin(int('0b1010', 2)) 
'0b1010' 
3>> bin(int('1010', 2)) 
'0b1010' 
3>> 0b1010 
10 
3>> int('0b1010', 2) 
10 
+0

Спасибо. Результатом этих операций являются строки и десятичные целые числа. Мне нужен бинарный литерал, отправленный на stdout. Еще раз спасибо. –

+0

Вы попробовали 'print ('0b1010')'? –

+0

Это работает, но это еще строка. Я не должен был упоминать stdout: мне нужна функция, которая возвращает true двоичный int. Я понимаю, что возвращение десятичного числа int чаще всего было бы столь же эффективным, но я хочу bin int. Thx, Ignacio. –

0

Попробуйте следующий код:

#!python3 

def fn(s, base=10): 
    prefix = s[0:2] 
    if prefix == '0x': 
     base = 16 
    elif prefix == '0b': 
     base = 2 
    return bin(int(s, base)) 


print(fn('15')) 
print(fn('0xF')) 
print(fn('0b1111')) 

Если вы уверены, что у вас есть s = "'0b010111'" и вы только хотите получить 010111, то вы можете просто нарезать средний, как:

s = s[2:-1] 

т.е. от индекса 2 до первого.

Но, как писал Игнасио и Антти, цифры абстрактны. 0b11 является одним из строковых представлений числа 3 таким же образом, как 3 еще одна строка представление числа 3.

repr() всегда возвращает строку. Единственное, что можно сделать с результатом repr, это разбить апострофы - потому что repr добавляет апострофы в строковое представление, чтобы подчеркнуть, что это строковое представление. Если вам требуется двоичное представление числа (как строка без апострофов), то окончательный ответ будет bin().

+0

Что делать, если вы хотите использовать число в расчете? Мы можем, например, использовать '0b1^0b10', но не' '0b1 '^' 0b10'', а использование' bin' не меняет этого. – dsaxton

+0

@dsaxton: 'bin()' возвращает строковое представление как двоичное число. Выполняя эксклюзивную или операцию, вы хотите сохранить ее как абстрактное число. В этом случае вы просто удаляете упаковку bin в обратной линии (но это не вопрос). Или вы можете написать функцию, которая реализует операцию xor при строчном представлении битов. – pepr

Смежные вопросы