How can I convert bytes object to decimal or binary representation in python?
32,005
Solution 1
Starting from Python 3.2, you can use int.from_bytes
.
Second argument, byteorder
, specifies endianness of your bytestring. It can be either 'big'
or 'little'
. You can also use sys.byteorder
to get your host machine's native byteorder.
import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder) # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder)) # => '0b10001'
Solution 2
Iterating over a bytes object gives you 8 bit ints which you can easily format to output in binary representation:
import numpy as np
>>> my_bytes = np.random.bytes(10)
>>> my_bytes
b'_\xd9\xe97\xed\x06\xa82\xe7\xbf'
>>> type(my_bytes)
bytes
>>> my_bytes[0]
95
>>> type(my_bytes[0])
int
>>> for my_byte in my_bytes:
>>> print(f'{my_byte:0>8b}', end=' ')
01011111 11011001 11101001 00110111 11101101 00000110 10101000 00110010 11100111 10111111
A function for a hex string representation is builtin:
>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
Author by
KaramJaber
Updated on July 05, 2022Comments
-
KaramJaber almost 2 years
I wanted to convert an object of type bytes to binary representation in python 3.x.
For example, I want to convert the bytes object
b'\x11'
to the binary representation00010001
in binary (or 17 in decimal).I tried this:
print(struct.unpack("h","\x11"))
But I'm getting:
error struct.error: unpack requires a bytes object of length 2
-
r4v1 over 5 yearsI tried finding the bit representation of a UUID using this method. When i used len function on that bit string, it came out to be 127. But UUID's are 128 bit numbers. Can you please explain why the length calculated was 127?
-
MacItaly about 4 years0-127 is 128 numbers
-
Jing He over 2 yearsif the bytes has leading zeros, this method does not work.