如何通过 USB 端口在 python 中发送字符串而不是字节数组?
How to send a string instead of bytearray in python via USB port?
在 labview 中,我将数组转换为字符串并直接输出:
但是在python 3.6 中,当我使用serial.write(string)
函数时,需要将字符串转换为bytearray
。
我是否可以发送一个字符串而不将其转换为 bytearray
?
没有
一个 Python 3.x 字符串是 Unicode 个代码点的序列。 Unicode 代码点是一个抽象实体,有点像颜色 red:为了以数字形式存储或传输它,必须对它进行 编码 转换为一个或多个字节的特定表示 - 有点像将颜色 red 编码为 #ff0000
。要将字符串发送到另一台计算机,您需要将其编码为字节序列,和 因为您可能想要使用许多可能的编码,您需要指定哪一种:
bytesToSend = myString.encode(encoding="utf-8")
为什么您不需要在 LabVIEW 中执行此操作?许多较早的编程语言,包括 LabVIEW 和 3.x 之前的 Python,都基于假设字符串被编码 1:1 为字节 - 每个字符都是一个字节,每个字节都是一个字符。这就是它在内存紧张且 non-English 文本不常见的计算早期的工作方式,但现在软件必须在网络世界中全球使用,这还不够好。
Python 3.x 明确打破了 link 并使字符串和字节序列成为不同且不兼容的类型:这意味着您必须处理差异,但它没什么大不了的,只是 encode
和 decode
是必要的,在我看来,这比试图假装字符串和字节序列仍然是同一件事更容易混淆。
LabVIEW 是 finally catching up with Unicode NXG 版本,尽管为了向后兼容,它允许您将字符串直接连接到一些真正对字节序列进行操作的函数。
有关更多信息,我建议阅读 Python 3.x Unicode HOWTO。
在 labview 中,我将数组转换为字符串并直接输出:
但是在python 3.6 中,当我使用serial.write(string)
函数时,需要将字符串转换为bytearray
。
我是否可以发送一个字符串而不将其转换为 bytearray
?
没有
一个 Python 3.x 字符串是 Unicode 个代码点的序列。 Unicode 代码点是一个抽象实体,有点像颜色 red:为了以数字形式存储或传输它,必须对它进行 编码 转换为一个或多个字节的特定表示 - 有点像将颜色 red 编码为 #ff0000
。要将字符串发送到另一台计算机,您需要将其编码为字节序列,和 因为您可能想要使用许多可能的编码,您需要指定哪一种:
bytesToSend = myString.encode(encoding="utf-8")
为什么您不需要在 LabVIEW 中执行此操作?许多较早的编程语言,包括 LabVIEW 和 3.x 之前的 Python,都基于假设字符串被编码 1:1 为字节 - 每个字符都是一个字节,每个字节都是一个字符。这就是它在内存紧张且 non-English 文本不常见的计算早期的工作方式,但现在软件必须在网络世界中全球使用,这还不够好。
Python 3.x 明确打破了 link 并使字符串和字节序列成为不同且不兼容的类型:这意味着您必须处理差异,但它没什么大不了的,只是 encode
和 decode
是必要的,在我看来,这比试图假装字符串和字节序列仍然是同一件事更容易混淆。
LabVIEW 是 finally catching up with Unicode NXG 版本,尽管为了向后兼容,它允许您将字符串直接连接到一些真正对字节序列进行操作的函数。
有关更多信息,我建议阅读 Python 3.x Unicode HOWTO。