填充某些字节后,如何使用 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
,但这要么是您在撰写问题时引入的错误,要么是您没有向我们展示的不相关错误的结果。)
目前我正在使用一个通过串口不断提供信息的传感器。读取并保存在缓冲区中的数据例如:
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
,但这要么是您在撰写问题时引入的错误,要么是您没有向我们展示的不相关错误的结果。)