将列表中的序列化位连接为字节



我有一个python列表,其中数据以序列化形式my_list = [1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0]

我想把这个16位的序列化数据连接成一个int型。16位从MSB存储到LSB, MSB在索引0

我尝试用for循环

进行位操作
tmp = 0;
for i in range(0,15)
tmp = tmp << 1 | my_list[i]
my_int = hex(tmp)
print(my_int)

然而,当我去打印时,它以十六进制显示了不正确的值。我是否可以将列表中的项按位连接为整型,或者是否需要将它们转换为另一种数据类型。或者这无关紧要,错误不是来自将它们连接为int型,而是来自其他东西?

您错过了索引1。for循环只迭代i的值,从0到14包容性。要使它循环遍历所有16个值,需要将端点设置为16。

for i in range(16):
tmp = (tmp << 1) | my_list[i]

这将输出0x9546,如预期。

也有一种首选的方式来写这个(或者使用enumerate如果你也需要索引):

for bit in my_list:
tmp = (tmp << 1) | bit

如果我没有误解,您想将二进制列表转换为单个十进制int?你可以这样做。

my_list = [1,0,0,1,0,1,0,1,0,1,0,0,0,1,1,0]
string_ints = [str(i) for i in my_list]
string_ints = ''.join(string_ints)
print(string_ints)
#1001010101000110
num = int(string_ints, 2)
print(num)
#38214

最新更新