如何在Python 3中从整数列表生成bytes对象

imzjd6km  于 2023-01-03  发布在  Python
关注(0)|答案(3)|浏览(209)

我有一个整数数组(都小于255),对应于字节值,例如[55, 33, 22],我怎样才能把它变成一个bytes对象,看起来像b'\x55\x33\x22'

isr3a4wc

isr3a4wc1#

只需调用bytes构造函数。
正如医生所说:
...构造函数参数解释为用于bytearray()
如果你点击这个链接:
如果它是一个 * iterable *,它必须是0 <= x < 256范围内的整数的可迭代对象,这些整数用作数组的初始内容。
因此,

>>> list_of_values = [55, 33, 22]
>>> bytes_of_values = bytes(list_of_values)
>>> bytes_of_values
b'7!\x16'
>>> bytes_of_values == b'\x37\x21\x16'
True

当然,值不会是\x55\x33\x22,因为\x表示 * heximal *,而十进制值55, 33, 22是十六进制值37, 21, 16,但是如果你有十六进制值55, 33, 22,你会得到你想要的输出:

>>> list_of_values = [0x55, 0x33, 0x22]
>>> bytes_of_values = bytes(list_of_values)
>>> bytes_of_values == b'\x55\x33\x22'
True
>>> bytes_of_values
b'U3"'
ih99xse1

ih99xse12#

bytes构造函数接受一个整数的可迭代对象,因此只需将列表输入到该对象即可:

l = list(range(0, 256, 23))
print(l)
b = bytes(l)
print(b)

输出:

[0, 23, 46, 69, 92, 115, 138, 161, 184, 207, 230, 253]
b'\x00\x17.E\\s\x8a\xa1\xb8\xcf\xe6\xfd'

另请参阅:Python 3 - on converting from ints to 'bytes' and then concatenating them (for serial transmission)

ni65a41a

ni65a41a3#

struct.pack("b"*len(my_list), *my_list)

我想会有用的

>>> my_list = [55, 33, 22]
>>> struct.pack("b"*len(my_list), *my_list)
b'7!\x16'

如果你想要十六进制,你需要使它在列表中十六进制

>>> my_list = [0x55, 0x33, 0x22]
>>> struct.pack("b"*len(my_list), *my_list)
b'U3"'

在所有情况下,如果该值具有ASCII表示形式,则当您尝试打印或查看该值时,它将显示该值。

相关问题