2016-05-25 18 views
1

Ich benutze Python 2.7. Fragen Sie sich nur, wie Sie Bytearray in 2-Byte-Gleitkommazahlen konvertieren können. Die bytearray ist:Verwenden von Python zum Konvertieren von Bytearray in Float

In[13]: temp 
Out[13]: `bytearray(b'\xd8[\xda[\xd8[\xda[\xd1[\xe1[\xeb[\xed[\xe7[\xeb[\xe7[\xea[\xd6[\xd5[\xd8[\xd5[\xd4[\xd3[\xe9[\xe2[\xe3[\xe5[\xe6[\xe8[\xdc[\xe6[\xe4[\xe4[\xe8[\xe2[\xd3[\xdb[\xd1[\xda[\xda[\xd7[\xd1[\xd1[\xdf[\xd1[\xd4[\xdd[\xe6[\xdd[\xe3[\xe4[\xdf[\xe1[\xd0[\xd4[\xd7[\xd6[\xd7[\xd4[\xdf[\xdd[\xe0[\xe5[\xe0[\xdf[\xe0[\xdd[\xdd[\xe3[\xdc[\xde[\xd8[\xe0[\xde[\xdf[\xde[\xe2[\xe7[\xe2[\xe2[\xea[\xe1[\xe0[\xda[\xd4[\xd9[\xdb[\xd9[\xdd[\xe1[\xe3[\xe3[\xe2[\xe3[\xe7[\xe1[\xe5[\xe2[\xe8[\xe4[\xe3[')` 

Wollen Sie 96 Float-Zahlen im Little-Endian-Format konvertieren, Byte 1 LSB und Byte 0 ist MSB.

+1

Sie sagen, Little-Endian, aber dann geben Sie dieses Byte 0 das höchstwertige Byte, das Big-Endian ist. Könnten Sie eine genauere Erklärung geben? – user2357112

+0

Ihre Byte-Zeichenfolge ist 14 Byte lang. In Python beträgt die Standardgröße für ein "float" 4 Byte, während ein "double" 8 Byte beträgt. Ihre Daten passen nicht zu einer ganzen Reihe von "float" - oder "double" -Zahlen. –

+0

Sind Sie sicher, dass Sie 16-Bit-Präzisionsschwimmer benötigen? Wie diese? https://en.wikipedia.org/wiki/Half-precision_floating-point_format – jsbueno

Antwort

1

können Sie verwenden numpyfromstring:

import numpy as np 

# little-endian 
x = np.fromstring(buffer(temp), dtype='<f2') 

# big-endian 
x = np.fromstring(buffer(temp), dtype='>f2') 

Wenn Sie normale Schwimmer benötigen, können Sie np.float16 zu Schwimmern konvertieren:

# one value 
float(x[0]) 

# all values 
[float(a) for a in x] 

# see user2357112 comments for other options 
+1

Wenn Sie ein NumPy-Array in eine Liste von Standard-Python-Skalaren konvertieren möchten, ist die "tolist" -Methode im Allgemeinen robuster und effizienter. Wenn Sie ein NumPy-Array von Floats mit halber Genauigkeit in ein Array mit regulären Floats mit doppelter Genauigkeit konvertieren möchten, ist "astype (float)" der richtige Weg. – user2357112

Verwandte Themen