我有一个旧的和破旧的Matlab脚本,我试图用Python重写它的一部分。不幸的是,我不仅不熟悉Matlab,而且这个剧本是在大约5 - 6年前编写的,所以没有人能够完全理解它的作用或它是如何做到的。现在,我感兴趣的是这个:
% Matlab
[rawData,count,errorMsg] = fscanf(serialStream, '%f')
现在,我错误地试图这样做:
# Python
rawData = []
count = 0
while True:
rawData.append(struct.unpack('f', ser.read(4))[0])
count += 1
但是,这会完全打印出垃圾值。经过进一步的研究,我了解到,在Matlab中,%f并不意味着像任何合理语言一样浮动,而是固定点数。因此,我的数据看起来像垃圾是有道理的。
通过反复试验,我确定我应该从串口获得156字节的块。但是,我不确定转换的值有多少,因为我找不到解释Matlab中固定点数大小的文档(this说它们可以达到128位,但这不是很有帮助)。我也找到了python库decimal,似乎我想从组成部分形成它们(即提供符号,数字和指数),但我不确定它们是如何存储在流中的我得到的数据。
有没有一种很好的方法可以在Python中从二进制流中创建一个固定点数?或者我是否必须在Matlab中查找实现并重新创建它?也许有更好的方式做我想做的事情?