12

我想在 python 3.x 中将字节类型的对象转换为二进制表示。

例如,我想将字节对象转换b'\x11'为二进制的二进制表示00010001(或十进制的 17)。

我试过这个:

print(struct.unpack("h","\x11"))

但我得到:

error struct.error: unpack requires a bytes object of length 2
4

2 回答 2

16

从 Python 3.2 开始,您可以使用int.from_bytes.

第二个参数 ,byteorder指定字节串的字节顺序。它可以是'big''little'。您还可以使用sys.byteorder来获取主机的本机字节序。

import sys
int.from_bytes(b'\x11', byteorder=sys.byteorder)  # => 17
bin(int.from_bytes(b'\x11', byteorder=sys.byteorder))  # => '0b10001'
于 2017-07-10T11:32:38.170 回答
6

迭代一个字节对象会给你 8 位整数,你可以很容易地格式化以二进制表示形式输出:

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

内置了一个十六进制字符串表示的函数:

>>> my_bytes.hex(sep=' ')
'5f d9 e9 37 ed 06 a8 32 e7 bf'
于 2020-09-22T23:28:39.953 回答