Python3如何从整数列表

时间:2015-06-05 04:07:38

标签: python python-3.x byte bytearray

我有一个与字节值对应的整数数组(均小于255)(即[55, 33, 22])如何将其转换为看起来像

的字节对象

b'\x55\x33\x22等。

由于

3 个答案:

答案 0 :(得分:6)

只需调用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 == '\x37\x21\x16'
True

当然,值不会是\x55\x33\x22,因为\x表示十六进制,十进制值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

答案 1 :(得分:5)

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)

答案 2 :(得分:0)

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表示,当您尝试打印或查看它时,它将显示它...