我在使用python 3解码接收到的字节时遇到问题。我正在通过串行连接控制arduino,并使用以下代码读取它:
import serial
arduino = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=20)
print(arduino.isOpen())
myData = arduino.readline()
print(myData)
我得到的结果看起来像b'\xe1\x02\xc1\x032\x82\x83\x10\x83\xb2\x80\xb0\x92\x0b\xa0'
或,b'\xe1\x02"\xe1\x00\x83\x92\x810\x82\xb2\x82\x91\xb2\n'
并尝试通过通常的方式将其解码,但myData.decode('utf-8')
我得到了错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 1: invalid start byte
。我尝试了其他解码(ASCII,cp437,十六进制,utf-16),但始终遇到相同的错误。
您有什么建议,我该如何解码接收到的字节或arduino需要进行哪些解码?我已经尝试过使用for循环对其进行逐段解码,但是我始终会遇到相同的错误消息。
有没有一种通用的方法可以避免解码问题或找出我必须使用哪种解码方式?
提前致谢。
正如@jsbueno在评论中所说,这不是解码问题,可能是因为接收到的字节数据实际上是二进制数据。从文件读取二进制数据(字节)时,我遇到了非常相似的问题。
这里有2个选项,第一个是struct模块:
import struct
a = open("somedata.img", "rb")
b = a.read(2)
file_size, = struct.unpack("i",a.read(4))
以这种方式编写代码会生成一个元组,因此要获取整数,只需使用 struct.unpack('i', a.read(4))[0]
如果要将数据存储在numpy数组中,我使用的另一种方法是:
import numpy as np
f = open("somefile.img", "r")
a = np.fromfile(f, dtype=np.uint32)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句