I'm trying to convert an integer to binary using the bin() function in Python. However, it always removes the leading zeros, which I actually need, such that the result is always 8-bit:
Example:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
Is there a way of doing this?
This question is related to
python
binary
formatting
bitwise-operators
You can use something like this
("{:0%db}"%length).format(num)
you can use rjust string method of python syntax: string.rjust(length, fillchar) fillchar is optional
and for your Question you acn write like this
'0b'+ '1'.rjust(8,'0)
so it wil be '0b00000001'
>>> '{:08b}'.format(1)
'00000001'
See: Format Specification Mini-Language
Note for Python 2.6 or older, you cannot omit the positional argument identifier before :
, so use
>>> '{0:08b}'.format(1)
'00000001'
You can use zfill:
print str(1).zfill(2)
print str(10).zfill(2)
print str(100).zfill(2)
prints:
01
10
100
I like this solution, as it helps not only when outputting the number, but when you need to assign it to a variable... e.g. - x = str(datetime.date.today().month).zfill(2) will return x as '02' for the month of feb.
When using Python >= 3.6
, the cleanest way is to use f-strings with string formatting:
>>> var = 23
>>> f"{var:#010b}"
'0b00010111'
Explanation:
var
the variable to format:
everything after this is the format specifier#
use the alternative form (adds the 0b
prefix)0
pad with zeros10
pad to a total length off 10 (this includes the 2 chars for 0b
)b
use binary representation for the numberSometimes you just want a simple one liner:
binary = ''.join(['{0:08b}'.format(ord(x)) for x in input])
Python 3
You can use the string formatting mini language:
def binary(num, pre='0b', length=8, spacer=0):
return '{0}{{:{1}>{2}}}'.format(pre, spacer, length).format(bin(num)[2:])
Demo:
print binary(1)
Output:
'0b00000001'
EDIT: based on @Martijn Pieters idea
def binary(num, length=8):
return format(num, '#0{}b'.format(length + 2))
I am using
bin(1)[2:].zfill(8)
will print
'00000001'
Source: Stackoverflow.com