2017-02-07 37 views
1

私はバイナリデータのブロックを同等のFloatデータに変換するためにPythonを使用しています。私はPythonのバージョン2.7にも作品を書かれている、しかし、同じバイナリブロックデータが#220 &û<êŒûvçæýTûz£¯÷」BInaryブロックをFloatに変換する

以下のようになります
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) 

のPython 3.4に失敗したコード最初のバイトは常に#であり、その後のバイトの数はNumberであり、この場合は2であるため、20が続きます。その後、実際のデータが来ます。各リーディングは4バイト長で、リトルエンディアン形式を使用してフロートに変換されます。 Pythonの2.7で実行

出力:

(1510, (-5.711601726275634e+25,)) 
(1520, (-246.98333740234375,)) 
(1530, (8723971440640.0,)) 
(1540, (-2.9736910156508145e-10,)) 
(1550, (-1039662528.0,)) 

コードは、私は、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で実行したときの出力と似た出力

答えて

2

あなたは繰り返し回数を提供していますが、実際にそれは古いバージョンのPython(struct allows repeat spec. without a format specifier

で、おそらくバグのため、パイソン2で働いていた1台のデコードフロート(あなたがここ4台の山車を解読しようとしている)

が必要

measurement = struct.unpack('<f', byte) 

このトリックを行う必要があります。

+0

こんにちはジーン、それを指摘してくれてありがとう....あなたのソリューションは、それを動作させました。 –

関連する問題