如何在Python中从整数创建字节值?

mat*_*123 3 python serial-port arduino pyserial

背景:我需要将一个数值作为字节发送到外部设备,但我遇到了一个问题.我的代码是:

ser=serial.Serial("COM3",9600, timeout=0)
ser.write(value)
Run Code Online (Sandbox Code Playgroud)

其中"value"是我读过的int读过的.问题是,当我发送它时,它发送字符值,而不是实际值(它发送数字5的字节值31,因为这是它的unicode位置,我相信)

实际上,我希望能够以"\ x05"字符发送它.我想我的问题是,我将如何将int 5转换为char"\ x05",或将37转换为"\ x37"

Amb*_*ber 8

使用内置功能chr().

如果您有需要发送的此类整数列表,则可以考虑使用bytearray().

或者,在较新版本的Python中,您只需使用一种byte类型.


sho*_*fee 5

你可以用这个..

bytes(chr(my_int))    # not strictly correct unless 0<=my_int<=255
bytes((my_int,))
Run Code Online (Sandbox Code Playgroud)

  • 第一个失败,至少在 Python 3 中是这样,因为它试图将字符串转换为字节而不指定编码。(读者请注意,如果您不熟悉编码问题,请参阅 http://www.joelonsoftware.com/articles/Unicode.html。)第二个效果很好。如果用于创建元组的尾随逗号对您来说很糟糕,您还可以执行类似 `bytes([5])` 的操作。 (3认同)