填充某些字节后,如何使用 Numpy 从缓冲区中读取值?

How can I read values from a buffer with Numpy when some bytes are padded?

目前我正在使用一个通过串口不断提供信息的传感器。读取并保存在缓冲区中的数据例如:

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 值的字节都显示为字节串 repr 中对应的 ASCII 字符。

np.frombuffer 正在做您想要的。 (在您显示的输出中有一个神秘的额外 95,但这要么是您在撰写问题时引入的错误,要么是您没有向我们展示的不相关错误的结果。)