python-3.x - 如何通过 USB 端口在 python 中发送字符串而不是字节数组?
问题描述
在labview中,我将一个数组转换为字符串并输出它:
但是在 python 3.6 中,当我使用serial.write(string)
函数时,需要将字符串转换为bytearray
.
无论如何我可以发送一个字符串而不将其转换为bytearray
?
解决方案
不。
Python 3.x 字符串是一系列Unicode代码点。Unicode 代码点是一个抽象实体,有点像红色:为了以数字形式存储或传输它,它必须被编码为一个或多个字节的特定表示 - 有点像将红色编码为#ff0000
. 要将字符串发送到另一台计算机,您需要将其编码为字节序列,并且由于您可能想要使用许多可能的编码,您需要指定哪一个:
bytesToSend = myString.encode(encoding="utf-8")
为什么不需要在 LabVIEW 中执行此操作?许多较旧的编程语言,包括 LabVIEW 和 Python 3.x 之前的版本,都基于字符串被 1:1 编码为字节的假设——每个字符是一个字节,每个字节是一个字符。这就是它在计算早期的工作方式,当时内存很紧,非英文文本很不寻常,但现在软件必须在网络世界中全球使用,这还不够好。
Python 3.x 采取了显式断开链接并使字符串和字节序列不同且不兼容的类型的步骤:这意味着您必须处理差异,但这并不是什么大问题,只是encode
必要decode
时,我认为它是比试图假装字符串和字节序列仍然是同一件事更容易混淆。
LabVIEW终于在 NXG 版本中赶上了 Unicode,尽管为了向后兼容,它让您无需将字符串直接连接到一些真正对字节序列进行操作的函数。
有关更多信息,我建议阅读Python 3.x Unicode HOWTO。
推荐阅读
- python - 如果枚举中存在值,则返回 True;如果不是,则返回 false
- ios - 文档/库以实现拉取以在 UICollectionView/ UITableView 中显示更多菜单选项
- drools - 带有滑动窗口示例的流口水规则
- laravel-backpack - 如何在选择内联创建字段上允许空值?
- c - 当我将它用于popen时,realloc是否需要自由操作
- python - 在 Python 中查找 TIMESTAMP 格式
- javascript - 自定义 ChartJS 悬停数据格式
- swift - 如何在子类中使用新的 collectionView?
- node-red - 如何从 ned-red 流中提取数据
- javascript - getElementsByClassName 中的动态元素