2013-01-13 5 views
11

Ich habe so etwas wie dies nicht in der Lage zu konvertieren:Wie konvertiert man von einem Float zu 4 Bytes in Java?

byte[] b = new byte[] { 12, 24, 19, 17}; 

in etwa wie folgt:

float myfloatvalue = ?; 

Könnte jemand bitte geben Sie mir ein Beispiel nennen?

Auch, wie man diesen float zurück zu Bytes dreht?

+0

Sind diese Bytes die Bits einer float-Repräsentation, oder sind sie eine 4-Byte-Ganzzahl? – Bohemian

+0

Und in welcher Reihenfolge sind sie? Ist 12 der wichtigste oder der niedrigste 8 Bit? –

+0

Sie sind nur zufällige Byte-Werte, die ich tippte – user1395152

Antwort

16

Von byte[] ->float, könnten Sie tun:

byte[] b = new byte[] { 12, 24, 19, 17}; 
float myfloatvalue = ByteBuffer.wrap(b).getFloat(); 

Hier ist eine Alternative ByteBuffer.allocatefloat zur Verwendung für die Umwandlung ->byte[] :

int bits = Float.floatToIntBits(myFloat); 
byte[] bytes = new byte[4]; 
bytes[0] = (byte)(bits & 0xff); 
bytes[1] = (byte)((bits >> 8) & 0xff); 
bytes[2] = (byte)((bits >> 16) & 0xff); 
bytes[3] = (byte)((bits >> 24) & 0xff); 
+0

Kleiner Punkt, ByeBuffer codiert in Big Endian und das aktuelle Beispiel ist in Little Endian. Sie passend zu machen wäre großartig! Ty! – Sam

36

byte[] ->float

Mit ByteBuffer:

byte[] b = new byte[]{12, 24, 19, 17}; 
float f = ByteBuffer.wrap(b).getFloat(); 

float ->byte[]

Reverse-Betrieb (das Ergebnis von oben zu wissen):

float f = 1.1715392E-31f; 
byte[] b = ByteBuffer.allocate(4).putFloat(f).array(); //[12, 24, 19, 17] 
+0

Das hilft und was ist mit dem Zurückkehren in Bytes – user1395152

+3

+1 ehrlich, ByteBuffer ist eine wenig genutzte und unterschätzte Klasse. – Bohemian

+0

@ user1395152: Bitte lesen Sie die Dokumentation von 'ByteBuffer'. Und siehe mein Update. –