我在使用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,hex,utf-16),但总是面临同样的错误。
您有什么建议,我如何解码收到的字节或解码arduino需要什么?我已经尝试使用for循环逐个解码它,但我总是面临同样的错误消息。
有没有一种通用的方法来避免解码问题或找出我必须使用哪种解码?
提前致谢。
答案 0 :(得分:1)
正如@jsbueno在评论中所说,这不是解码问题,可能是因为接收的字节数据实际上是二进制数据。从文件中读取二进制数据(字节)时遇到了类似的问题。
这里有两个选项,第一个是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)