在 python 中将字节<list>意外转换为<bytes>

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

我不知道如何轻松地将字节列表提供给“字节”类型。虽然我让列表由“for”循环提供。该列表也突然转变为“字节”类。 我的代码如下:

    bit0=bytearray()
    bit=[int(0).to_bytes(length=input.sample_width, byteorder='big', signed=True)
         [1::-1] for y in [z*input.channels for z in range(input.channels)]]
    print(type(bit),bit)
    for bit in bit:
        bit0+=bit  
    print(type(bit),bit)    

[b'\x00\x00'] b'\x00\x00'

我可以预期 b'\x00' 因为位中的每个位都有 '\x00' 我对此感到非常沮丧,因为这不是我的菜。

我的Python是“Python 3.8.18”

for bit in bit:
    bit0+=bit

该循环应该有任何方法来转换“位”变量的类型。

python list types byte
1个回答
0
投票

在你的循环中:

for bit in bit:
    bit0 += bit

您正在迭代 bit,它最初是字节对象的列表。但是,在循环内,您将重用名称位作为循环变量。因此,在每次迭代中,bit 不再引用列表,而是引用该列表中的每个单独的字节对象。

当您在循环后打印 type(bit) 时,它确实显示 因为 bit 现在引用字节对象,而不是列表。

要解决此问题,您应该在循环中使用不同的变量名称:

for b in bit:
    bit0 += b

这样,您就可以迭代列表位并将每个字节对象 b 附加到位 0,而不更改位本身的引用。

这是更正后的代码:

bit0 = bytearray()
bit = [int(0).to_bytes(length=input.sample_width, byteorder='big', signed=True)[1::-1] 
       for y in [z*input.channels for z in range(input.channels)]]
print(type(bit), bit)
for b in bit:
    bit0 += b
print(type(bit), bit)
© www.soinside.com 2019 - 2024. All rights reserved.