Python 填充某些字节时,如何使用Numpy从缓冲区读取值?
目前,我正在使用一个传感器,通过使用串行端口不断提供信息。读取并保存在缓冲区中的数据如下:Python 填充某些字节时,如何使用Numpy从缓冲区读取值?,python,numpy,pyserial,Python,Numpy,Pyserial,目前,我正在使用一个传感器,通过使用串行端口不断提供信息。读取并保存在缓冲区中的数据如下: b'\x00\x009\x00A\x002\x00\x00\x18\x00\x13\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11' 我一直在使用numpy将缓冲区转换为可以迭代的数组 byteVec = np.frombuffer(byteBuffer, dtype = 'uint8') 但在示例中执行此操作会产生以下数组: [95 0
b'\x00\x009\x00A\x002\x00\x00\x18\x00\x13\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11'
我一直在使用numpy将缓冲区转换为可以迭代的数组
byteVec = np.frombuffer(byteBuffer, dtype = 'uint8')
但在示例中执行此操作会产生以下数组:
[95 0 0 57 0 65 0 50 0 0 24 0 19 0 17 0 16 0 16 0 16 0 16 0 17]
正如您所看到的,大多数数据都被正确读取,除了左边带有额外零的值,如x009、x00A或x002。我不知道为什么一些值会这样读取,因为pyserial端口被编程为只接受8位的序列,有没有一种方法可以让我使用numpy读取带有填充位的字节?还是串行端口读数有问题
提前谢谢。在我看来这是正确的:
byteBuffer = b'\x00\x009\x00A\x002\x00\x00\x18\x00\x13\x00\x11\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x11'
np.frombuffer(byteBuffer, dtype = 'uint8')
输出
array([ 0, 0, 57, 0, 65, 0, 50, 0, 0, 24, 0, 19, 0, 17, 0, 16, 0,
16, 0, 16, 0, 16, 0, 16, 0, 17], dtype=uint8)
这些不是“填充”字节\x009
是两个字节-一个字节值为0,一个字节值为57,恰好对应于9
字符的ASCII码。与可打印ASCII值相对应的大多数字节在bytestring的repr
中显示为相应的ASCII字符
np.frombuffer
正是您想要的。(在您显示的输出中有一个神秘的额外的95
,但这可能是您在撰写问题时引入的错误,或者是您没有向我们展示的一个无关错误的结果。)这可能比我的答案更有用,解释得更好