如何在Python中将字节对象转换为十进制或二进制表示形式?

问题描述 投票:0回答:3

我想将 bytes 类型的对象转换为 python 3.x 中的二进制表示形式。

例如,我想将字节对象

b'\x11'
转换为二进制表示形式
00010001
(或十进制的17)。

我试过这个:

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

但我得到:

error struct.error: unpack requires a bytes object of length 2
python python-3.x type-conversion byte bytestream
3个回答
22
投票

从Python 3.2开始,您可以使用

int.from_bytes

第二个参数,

byteorder
,指定字节串的endianness。它可以是
'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'

11
投票

迭代 bytes 对象会得到 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'

0
投票

使用

bitstring
套餐

import bitstring
bitstring.BitArray(b"\x5a\x01\x00").bin

返回“010110100000000100000000”

警告

接受的答案

bin(int.from_bytes(b"\x5a\x01\x00", byteorder=sys.byteorder))
返回“0b101011010”,这显然是无稽之谈!

如果转换 int.from_bytes(b'\x11\x00', byteorder=sys.byteorder),接受的答案可能会失败。当它交换字节顺序时,用小端 int 表示字节也可能是矛盾的,并且我不知道在处理例如9 个字节的序列。

© www.soinside.com 2019 - 2024. All rights reserved.