2013-01-13 16 views
11

Non sono stato in grado di convertire qualcosa di simile:Come convertire da un float a 4 byte in Java?

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

in qualcosa di simile a questo:

float myfloatvalue = ?; 

Qualcuno potrebbe farmi un esempio?

Inoltre, come trasformare il float in byte?

+0

Questi byte sono quei bit di una rappresentazione float, o sono un intero di 4 byte? – Bohemian

+0

E in quale ordine si trovano? 12 sono gli 8 bit più significativi o meno significativi? –

+0

Sono solo valori di byte casuali che ho digitato – user1395152

risposta

16

Da byte[] ->float, si potrebbe fare:

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

Ecco un'alternativa all'utilizzo ByteBuffer.allocate per la conversione float ->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

Punto minore, ByeBuffer codifica in big endian e l'esempio corrente è in little endian. Farle corrispondere sarebbe fantastico! Ty! – Sam

36

byte[] ->float

Con ByteBuffer:

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

float ->byte[]

operazione inversa (conoscendo il risultato di cui sopra):

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

Questo aiuta e cosa ne diresti di convertire il float in byte – user1395152

+3

+1 onestamente, ByteBuffer è una classe sottoutilizzata e sottovalutata. – Bohemian

+0

@ user1395152: per favore, leggi la documentazione di 'ByteBuffer'. E vedi il mio aggiornamento. –

Problemi correlati