如何通过USB端口在python中发送字符串而不是字节数组?

时间:2019-06-27 08:31:08

标签: python-3.x pyserial labview

在labview中,我将数组转换为字符串,然后将其输出:

block diagram extract

但是在python 3.6中,当我使用serial.write(string)函数时,需要将字符串转换为bytearray

无论如何,我是否可以发送字符串而不将其转换为bytearray

1 个答案:

答案 0 :(得分:0)

Python 3.x字符串是Unicode个代码点的序列。 Unicode代码点是一个抽象实体,有点像 red 颜色:为了存储它或以数字形式传输它,必须对其进行编码以特定的表示形式一个或多个字节-有点像将颜色 red 编码为#ff0000。要将字符串发送到另一台计算机,您需要将其编码为字节序列,,因为可能要使用多种编码方式,因此需要指定哪种编码方式:

bytesToSend = myString.encode(encoding="utf-8")

您为什么不需要在LabVIEW中执行此操作?许多较旧的编程语言(包括LabVIEW和3.x之前的Python)都基于将字符串按1:1编码到的假设。个字节-每个字符都是一个字节,每个字节都是一个字符。这是它在早期的计算中的工作方式,当时内存紧张,非英语文本不常见,但由于必须在网络世界中全球使用该软件,这还不够好。

Python 3.x采取了显式断开链接并使字符串和字节序列成为不同且不兼容的类型的步骤:这意味着您必须处理差异,但这没什么大不了的,只是encodedecode是必要的,我认为这比试图假装字符串和字节序列仍然是同一件事要容易。

LabVIEW在NXG版本中为finally catching up with Unicode,尽管为了向后兼容,它使您可以直接将字符串连接到某些真正对字节序列进行操作的函数。

有关更多信息,我建议阅读Python 3.x Unicode HOWTO