Python bin without 0b

Remove the 0b in binary

but I want to take the 0b in the string out and I am having some issues with doing this. This is going to be within a function returning a binary number without the 0b .

11 Answers 11

Use slice operation to remove the first two characters.

In [1]: x = 17 In [2]: y = bin(x)[2:] In [3]: y Out[3]: '10001' 

use python string slice operation.

to format this to 8-bits use zfill .

It’s easy just make this function:

def f(n):print(''.format(n)) f(17) >>> 10001 

Use the format() builtin. It also works for hexadecimal, simply replace ‘b’ with ‘x’ .

This one is using replace Where n is the provided decimal

with Python 3.6 you can use f-strings

I do not know why nobody suggested using lstrip .

integer = 17 bit_string = bin(integer) final = bit_string.lstrip('-0b') # minus to also handle negations print(final) # prints 10001 

inhexa=(hexanum.get()) # gets the hexa value dec = int(inhexa,16) #changes the base ensures conversion into base 16 to interger

 b=bin(dec)[2:] #converts int/dec into binary and shows string except first two digits 

Since this page will answer to developers performing byte handling therefore performance oriented there should be a benchmarked comparison of above methods.

Assuming we do not require padding (a subject this thread tackles) the aforementioned solutions (including the top answer from the other thread) yield these results (for 10 million random 21-bit integers) : Results

So the proves faster with the intuitive slicing method as a close second (results were consistent between runs on a r5-3600 cpu and 16GB of 2133MHz 19CL system memory).

In the end the answer from Diego Roccia was the fastest and pretty elegant.

Padding with leading zeros and further options of said method can be found here but using the f» with .zfill() for padding is faster than the solutions given there (find actual tests in here).

So the answer is: f»

Источник

Удалить 0b в двоичном

Используйте операцию среза для удаления первых двух символов.

In [1]: x = 17 In [2]: y = bin(x)[2:] In [3]: y Out[3]: '10001' 

использовать операцию python string slice .

чтобы отформатировать это до 8 бит, используйте zfill .

Питонический способ решить.;)

Легко просто выполнить эту функцию:

def f(n):print(''.format(n)) f(17) >>> 10001 

Ещё вопросы

  • 0 переопределить функцию в cocos2dx
  • 1 Привязать строку из .resx ResourceDictionary к TextBlock.Text, используя ключ индекса
  • 1 Функция re.findAll () в Python не будет работать должным образом
  • 1 Генерация QR-кода с цветами в каждом пикселе изображения и двоичного значения
  • 1 Python ruamel.yaml сбрасывает теги с кавычками
  • 0 Как сделать элемент видимым или нет с помощью тега выбора?
  • 0 PHP в JavaScript с помощью кнопки «Отправить»
  • 0 Как получить список предметов из одной таблицы и общее количество связанных с ними предметов из пыльника в mySql?
  • 0 Набор символов Liquibase MySQL для изменения таблицы
  • 0 условное форматирование по отрицательному значению
  • 1 Как отправить контактные номера в базу данных Firebase?
  • 1 Не удается получить SQL-запрос для сохранения результатов в переменных
  • 0 Laravel Eloquent запрос сборки выберите минимальное значение
  • 1 Приложение возвращается к неправильной активности после выхода из намерения камеры
  • 1 Увеличение идентификатора в корзине покупок
  • 1 Одновременная запись нескольких переменных в Pandas
  • 1 Иметь представление обтекания содержимого, но соответствовать родительскому, если есть свободное место
  • 0 Проверьте, можно ли загрузить изображение
  • 1 Формат аудио потока гобоя: исчезнет ли формат int16_t?
  • 0 Скрыть блок, который не соответствует высоте контейнера
  • 1 Ошибка при демаршаллинге в Java
  • 0 AngularJS Применить фильтр ко всем входам
  • 0 $ _SESSION не хранит значения
  • 1 Маршрутизатор не определен Node.js
  • 0 PDO вставляет последний идентификатор вставки в две таблицы
  • 1 Использование основанного на отражении статического вызова вместо интерфейсов
  • 0 Как использовать QToolButton
  • 1 Как написать этот тип значка при использовании текста в Android
  • 1 Приложение MVC 4.0 .NET и значения, возвращаемые из базы данных после развертывания в IIS
  • 0 asp.net получает данные из запроса
  • 1 Как использовать пустой вид с нумерацией страниц с помощью библиотеки подкачки Android?
  • 1 Панды — объединить два не сложенных кадра данных
  • 1 отображение изображения в столбце вида сетки на странице aspx с условием
  • 1 Неверное значение константы с использованием переменной в качестве параметра
  • 0 Как получить доступ к обновленному значению в разных контроллерах страниц?
  • 0 Почему мой процесс останавливается при запуске в фоновом режиме?
  • 1 Bluetooth получает данные от HC05 не работает. Я получаю эти данные мусора ����
  • 0 если утверждение продолжает отступать к остальной части
  • 1 Соединение Tomcat JDBC работает в Eclipse, но не автономно
  • 0 Компресс Классы DAO слоя
  • 1 Сортировать список на основе другого списка
  • 0 Показать всех пользователей всех подразделений в активном каталоге, используя adLDAP?
  • 0 Программирование сокетов Php — ACK-сервер с 4-байтовым целочисленным форматом
  • 1 Кратчайший путь от города 0 до N (автомобильным / воздушным смешанным тарифом)
  • 0 Скрытие тела таблицы, когда все строки скрыты в angularjs
  • 0 MySQL не запускается в панели управления Xampp в Windows 8.1
  • 0 Как использовать Apache Marmotta SPARQL веб-сервис API с AngularJS?
  • 1 Вызов метода из Native dll работает в первый раз, сбои во второй раз (из-за модулей fortran)?
  • 0 Советы по базе данных MySQL
  • 0 Как добавить переменные массива в таблицу базы данных

Источник

How can I make `bin(30)` return `00011110` instead of `0b11110`? [duplicate]

What does the b stand for in the output of bin(30) : 0b11110 ? Is there any way I can get rid of this b ? How can I get the output of bin() to always return a standard 8 digit output?

7 Answers 7

Return the numeric string left filled with zeros in a string of length width. A sign prefix is handled correctly. The original string is returned if width is less than len(s).

@loannis Your edit caused problems because now the wrong result was provided for negative values, -30 != 30 whereas your edit results in bin(30).lstrip(‘-0b’).zfill(8) == bin(-30).lstrip(‘-0b’).zfill(8)

0b is like 0x — it indicates the number is formatted in binary (0x indicates the number is in hex).

To strip off the 0b it’s easiest to use string slicing: bin(30)[2:]

And similarly for format to 8 characters wide:

Alternatively you can use the string formatter (in 2.6+) to do it all in one step:

For this case I prefer the format built in function instead of the format method: format(30, ’08b’) as opposed to «<0:08b>«.format(30)

Don’t use str.format() for a single placeholder and nothing else. That’s what we have format() for: format(30, ’08b’)

Take advantage of the famous format() function with the lesser known second argument and chain it with zfill()

‘b’ — Binary ‘x’ — Hex ‘o’ — Octal ‘d’ — Decimal

>>> print format(30, 'b') 11110 >>> print format(30, 'b').zfill(8) 00011110 

Should do. Here ‘b’ stands for binary just like ‘x’ , ‘o’ & ‘d’ for hexadecimal, octal and decimal respectively.

You can use format in Python 2 or Python 3:

>> print( format(15, '08b') ) 00001111 

This will remove the ‘0b’ portion of the returned value and you can use the output anywhere .

The current answers don’t consider negative values (thanks @Gui13 for the comment!) in which case you get -0b. instead of just 0b. . You can handle both with a simple if-else where the value is checked whether it’s less than zero or not

>>> def printBit(x): if x < 0: return '-' + bin(x)[3:].zfill(8) # replace else: return bin(x)[2:].zfill(8) >>> print(printBit(30)) '00011110' >>> print(printBit(-30)) '-00011110' 
>>> print(bin(30)).replace('0b', '').zfill(8) 

The problem with the call above is that one of the bits gets «lost» to the — sign due to the same value being used for the zfill() . You can handle this too with a simple ternary check:

>>> x = 30 >>> print(bin(x)).replace('0b', '').zfill(9 if x < 0 else 8) '00011110' >>> x = -30 >>> print(bin(x)).replace('0b', '').zfill(9 if x < 0 else 8) '-00011110' 

Last but not least you can also make the zfill() to automatically adapt the number of 0 s to match a byte (8 bits) or a n number of bit quadruplets (4 bits):

>>> def pb(x): bres = bin(x).replace('0b', '').replace('-', '') # If no minus, second replace doesn't do anything lres = len(bres) # We need the length to see how many 0s we need to add to get a quadruplets # We adapt the number of added 0s to get full bit quadruplets. # The '-' doesn't count since we want to handle it separately from the bit string bres = bres = ('-' if x < 0 else '') + bres.zfill(lres + (4-lres%4)) return bres >>> print(pb(7)) '0111' >>> print(pb(-7)) '-0111' >>> print(pb(30)) '00011110' >>> print(pb(-30)) '-00011110' 

Here is the final version with adaptable filling of 0 s and additional split with space every n characters (where the n is determined by filling factor):

>>> def pb(x, fillingBits=4, splitWithSpace=True): # If no minus, second replace doesn't do anything bres = bin(x).replace('0b', '').replace('-', '') lres = len(bres) bres = bres.zfill(lres + (fillingBits - (lres % fillingBits))) lres = len(bres) # We can also add a blank after every fillingBits character if splitWithSpace: bres = ' '.join([bres[i:(i + fillingBits)] for i in range(0, lres, fillingBits)]) bres = ('-' if x < 0 else '') + bres # We remove any trailing/leading blanks (occurring whenever splitWithSpace enabled) return bres.strip() >>> print(pb(7)) '0111' >>> print(pb(-7)) '-0111' >>> print(pb(30)) '0001 1110' >>> print(pb(-30)) '-0001 1110' 

Источник

Читайте также:  min-height
Оцените статью