Voor het converteren van een bytearray naar een double vond ik dit:
//convert 8 byte array to double
int start=0;//???
int i = 0;
int len = 8;
int cnt = 0;
byte[] tmp = new byte[len];
for (i = start; i < (start + len); i++) {
tmp[cnt] = arr[i];
//System.out.println(java.lang.Byte.toString(arr[i]) + " " + i);
cnt++;
}
long accum = 0;
i = 0;
for ( int shiftBy = 0; shiftBy < 64; shiftBy += 8 ) {
accum |= ( (long)( tmp[i] & 0xff ) ) << shiftBy;
i++;
}
return Double.longBitsToDouble(accum);
Maar ik kon niets vinden dat een double in een bytearray zou omzetten.
Antwoord 1, autoriteit 100%
Of nog eenvoudiger,
import java.nio.ByteBuffer;
public static byte[] toByteArray(double value) {
byte[] bytes = new byte[8];
ByteBuffer.wrap(bytes).putDouble(value);
return bytes;
}
public static double toDouble(byte[] bytes) {
return ByteBuffer.wrap(bytes).getDouble();
}
Antwoord 2, autoriteit 11%
long bits = Double.doubleToLongBits(myDouble);
Antwoord 3, autoriteit 9%
public static byte[] toByteArray(double d) {
long l = Double.doubleToRawLongBits(d);
return new byte[] {
(byte)((l >> 56) & 0xff),
(byte)((l >> 48) & 0xff),
(byte)((l >> 40) & 0xff),
(byte)((l >> 32) & 0xff),
(byte)((l >> 24) & 0xff),
(byte)((l >> 16) & 0xff),
(byte)((l >> 8) & 0xff),
(byte)((l >> 0) & 0xff),
};
}
Antwoord 4, autoriteit 9%
De functionaliteit is al in de API geïmplementeerd. Wikkel de bytearray in een ByteBuffer
en gebruik ByteBuffer.putLong
en ByteBuffer.getLong
:
import java.nio.*;
import java.util.Arrays;
public class Test {
public static void main(String... args) throws Exception {
long[] longArray = { 1234, 2345, 3456 };
// Longs to bytes
byte[] bytes = new byte[longArray.length * 8];
ByteBuffer buf = ByteBuffer.wrap(bytes);
for (long l : longArray)
buf.putLong(l);
System.out.println(Arrays.toString(bytes));
// Bytes to longs
ByteBuffer buf2 = ByteBuffer.wrap(bytes);
long[] longs = new long[bytes.length / 8];
for (int i = 0; i < longs.length; i++)
longs[i] = buf2.getLong(i*8);
System.out.println(Arrays.toString(longs));
}
}
Uitvoer:
[0, 0, 0, 0, 0, 0, 4, -46, 0, 0, 0, 0, 0, 0, 9, 41, 0, 0, 0, 0, 0, 0, 13, -128]
[1234, 2345, 3456]
Antwoord 5, autoriteit 6%
public static final short byteArrayToShort(byte[] bytes) {
return ByteBuffer.wrap(bytes).getShort();
}
public static final int byteArrayToInt(byte[] bytes) {
return ByteBuffer.wrap(bytes).getInt();
}
public static final float byteArrayToFloat(byte[] bytes) {
return ByteBuffer.wrap(bytes).getFloat();
}
public static double byteArrayToDouble(byte[] bytes) {
return ByteBuffer.wrap(bytes).getDouble();
}
public static final long byteArrayToLong(byte[] bytes) {
return ByteBuffer.wrap(bytes).getLong();
}
Hopelijk helpt het.