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
,但这可能是您在撰写问题时引入的错误,或者是您没有向我们展示的一个无关错误的结果。)

这可能比我的答案更有用,解释得更好