我使用Python将二进制数据块转换为等效的Float数据。我编写的代码在Python版本2.7中运行良好,但在Python 3.4中也是如此。
import sys
import struct
start = 1500
stop = 1600
step = 10
with open("/home/pi/Desktop/Output.bin", "rb") as f:
byte = f.read(2)
readNext = int(byte[1])
byte = f.read(int(readNext))
byte = f.read(4)
while (len(byte) > 3):
measurement = struct.unpack('<f4', byte)
start = start + 10
print(start, measurement)
byte = f.read(4)
二进制块数据如下所示
“#220安培; U&LT;êŒûvçæýTûz£¯÷ßwΔ
第一个字节总是#,后跟一个数字,表示后面的字节数是Number,在这种情况下它是2,所以接着是20.之后是真实数据。每个读取长度为4个字节,并使用小端格式转换为浮点数。
在Python 2.7中运行时的输出:
(1510, (-5.711601726275634e+25,))
(1520, (-246.98333740234375,))
(1530, (8723971440640.0,))
(1540, (-2.9736910156508145e-10,))
(1550, (-1039662528.0,))
Code我在Python 3.4中运行:
import sys
import struct
start = 1500
stop = 1600
step = 10
with open("/home/pi/Desktop/Output.bin", "rb") as f:
byte = f.read(2)
byte = byte.decode('UTF-8') #I had to convert to read the Byte
readNext = byte[1] # Reading the First Digit
byte = f.read(int(readNext)) # Skip the Integer values
byte = f.read(4) # The Actual Data
while (len(byte) > 3):
measurement = struct.unpack('<f4', byte)
start = start + 10
print(start, measurement)
byte = f.read(4)
错误:
Traceback (most recent call last):
File "/home/pi/Desktop/MultiProbe/bin2float.py", line 17, in <module>
measurement = struct.unpack('<f4', byte)
struct.error: repeat count given without format specifier
如何修改它以使输出类似于在Python2.7中运行时获得的输出
答案 0 :(得分:2)
你提供了一个重复计数,但实际上你需要1个已解码的浮点数(你在这里尝试解码4个浮点数)
它在python 2中工作,可能是因为旧版本的python(struct allows repeat spec. without a format specifier)中存在错误
measurement = struct.unpack('<f', byte)
应该这样做。