gpt4 book ai didi

Python串行写入功能不起作用

转载 作者:太空狗 更新时间:2023-10-29 22:13:20 26 4
gpt4 key购买 nike

我是 python 的新手,正在尝试使用串行和 python 3 写入数据。请帮助解决以下错误。

>>> import serial
>>> check=serial.Serial(1)
>>> print(check.name)
COM2
>>> check.write("test")
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
check.write("test")
File "C:\Python34\lib\site-packages\serial\serialwin32.py", line 283, in write
data = to_bytes(data)
File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
b.append(item) # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required

最佳答案

import serial
check=serial.Serial(1)
check.write(b"test")

以前版本的 Python 为您做了很多 stringbytes 的转换(我个人非常喜欢旧方法)。如今,在 Python3+ 中,您需要根据输出/输入自行处理数据类型转换,这更有意义,尽管我讨厌它...

这也适用于套接字和许多其他对象。
因此,为了通过串行或套接字发送数据,您需要做的就是将字符串转换为字节对象。通过声明 b"this is bytes"bytes(MyString, 'UTF-8') 来做到这一点。

例如:

import serial
check=serial.Serial(1)
data = "test"
check.write(bytes(data, 'UTF-8'))

当机器(您的电脑)处理较低级别的数据(串行、套接字等)时,它习惯于使用二进制代码,这就是您可能听说过的 01010101
但是您习惯于使用诸如 "Hello world" 之类的字符串。中间有一个中间层,它更接近于机器码,但仍然可以被我们人类使用和理解,那就是 byte 对象。

a -> 97 -> 01100001

之前(如前所述)python 将您的 a 转换为 97 以便为处理机器代码的驱动程序做准备。这在 Python 源代码中造成了很多问题,因此决定您需要在需要时自己转换数据,而不是 Python 试图为您解决。因此,在将其发送到套接字层(串行也使用套接字)之前,您只需将其转换为更接近机器可以理解的东西:)

  • Here您会找到每个字符具有的值的完整列表。

Ps:这是对事物工作原理的过度简化,如果我弄混了术语或其他内容,请发表评论,我会更正。这只是为了解释为什么你在你的字符串前面放一个 b :)

关于Python串行写入功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22835551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com