如何在Python中将整数转换为字节值?

4

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

ser=serial.Serial("COM3",9600, timeout=0)
ser.write(value)

"value"是我读取的一个整数。问题在于,当我发送它时,它发送的是字符值,而不是实际的值(例如,它发送数字5的字节值31,因为那是它的Unicode位置,我想)

实际上,我想发送的是字符"\x05"。我的问题是,我应该如何将一个整数5转换成字符"\x05",或者将37转换成"\x37"呢?

2个回答

8
使用内置函数chr()
如果您有需要发送的这些整数列表,可以考虑使用bytearray()
或者,在较新版本的Python中,您可以直接使用byte类型。

5

你可以使用这个...

bytes(chr(my_int))    # not strictly correct unless 0<=my_int<=255
bytes((my_int,))

3
第一个代码片段在Python 3中失败,因为它试图将字符串转换为字节,但没有指定编码。(读者请注意,如编码问题对您来说是新问题,请参见http://www.joelonsoftware.com/articles/Unicode.html。)第二个代码片段效果很好。如果你觉得用逗号创建元组的尾随逗号看起来不太好,也可以这样做:`bytes([5])`。 - Jack O'Connor
第二个在Python 2下失败,其中bytes((1,))返回字符串'(1,)'。在Python 3下,它返回b'\x01'。因此,如果您希望支持Python 2和3,请不要使用这两个。 - larsks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接