Python3如何从整数列表中创建一个字节对象

Sta*_*tec 1 python byte bytearray python-3.x

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

b'\x55\x33\x22 等等

谢谢

aba*_*ert 6

只需调用bytes构造函数.

正如文档所说:

...构造函数参数被解释为bytearray().

如果您按照该链接:

如果它是可迭代的,则它必须是范围内的可迭代整数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
Run Code Online (Sandbox Code Playgroud)

当然,值不会是\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
Run Code Online (Sandbox Code Playgroud)

  • @totalMongot 0x37 的 ASCII 值为“7”(数字 7),0x21 的 ASCII 值为“!” (感叹号)。0x16 的 ASCII 值是 SYN(控制字符同步空闲)。由于 SYN 是非打印字符,因此它在字节对象中由十六进制转义 \x16 表示 (3认同)

Kev*_*ase 5

bytes构造函数采用迭代整数,所以只给你的名单是:

l = list(range(0, 256, 23))
print(l)
b = bytes(l)
print(b)
Run Code Online (Sandbox Code Playgroud)

输出:

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

另请参阅: Python 3-从int转换为“字节”,然后将它们串联(用于串行传输)