将字节转换为位?

时间:2017-06-27 18:35:32

标签: python python-3.x

我正在使用Python 3.6,我需要将整数转换为单个位的列表。例如,如果我有:

def bitstring_to_bytes(s):
    return int(s, 8).to_bytes(8, byteorder='big')

command_binary = format(1, '08b')
bin_to_byte = bitstring_to_bytes(command_binary)

目前输出b'\x00\x00\x00\x00\x00\x00\x00\x01'

但是我需要有一个整数列表(但是以十六进制格式),如[0x00, 0x00 ... 0x01],以便将它传递给另一个函数。我被困在这一部分。

2 个答案:

答案 0 :(得分:1)

如何将简单的列表理解转换为bytes类型?

bin_to_byte = b'\x00\x00\x00\x00\x00\x00\x00\x01'
list_of_bytes = [bytes([i]) for i in bin_to_byte]
print(list_of_bytes)
# [b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x01']

它与list(bin_to_byte)几乎相同,期望它会强制保留bytes而不是int。如果您确实需要int的列表,那么是,list(bin_to_byte)就足够了。

如您所见,列表中的每个项目都不是int也不是str,而是bytes

>>> isinstance(list_of_bytes[0], str)
False
>>> isinstance(list_of_bytes[0], int)
False
>>> isinstance(list_of_bytes[0], bytes)
True

因为使用hex时的问题是它会将您的项目转换为字符串,即使它们具有十六进制形式,例如

bin_to_byte = b'\x00\x00\x00\x00\x00\x00\x00\x01'
list_of_hex = list(map(hex, (bin_to_byte)))
print(list_of_hex)
# ['0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x0', '0x1']
print(isinstance(list_of_hex[0], str))
# True

答案 1 :(得分:0)

一个班轮:

list(map(lambda b: bin(int(b)), list(str(bin( <your integer> ))[2:])))

OR

list(map(lambda b: hex(int(b)), list(str(bin( <your integer> ))[2:])))

这很难看,但我很确定它完全符合您的需要。