如何将float转换为字节数组,反之亦然?

我试图将float转换为原始byte[] ,反之亦然:

 public byte[] floatToByteArray(final float value) { return new byte[] { (byte) (value >> 56), (byte) (value >> 48), (byte) (value >> 40), (byte) (value >> 32), (byte) (value >> 24), (byte) (value >> 16), (byte) (value >> 8), (byte) (value) }; } 

奇怪的是,当我尝试将新分配的byte[]移回float ,结果只不过是垃圾。

但是,当我使用原始long数据类型作为参数时,看起来好像相同的算法工作正常。

 public byte[] longToByteArray(final long value) { return new byte[] { (byte) (value >> 56), (byte) (value >> 48), (byte) (value >> 40), (byte) (value >> 32), (byte) (value >> 24), (byte) (value >> 16), (byte) (value >> 8), (byte) (value) }; } 

请改用它们。

 public static byte [] long2ByteArray (long value) { return ByteBuffer.allocate(8).putLong(value).array(); } public static byte [] float2ByteArray (float value) { return ByteBuffer.allocate(4).putFloat(value).array(); } 

只是为了添加另一个基于@shazin解决方案的有用的:

 public static byte[] FloatArray2ByteArray(float[] values){ ByteBuffer buffer = ByteBuffer.allocate(4 * values.length); for (float value : values){ buffer.putFloat(value); } return buffer.array(); } 

它不会工作。 Float.byteValue只是将浮点值截断为1个字节

  public byte byteValue() { return (byte)value; } 

此外,还不清楚你想要的字节数。 它是IEEE 754浮点单浮点位布局吗? 然后你可以先将它转换为int

 int i = Float.floatToIntBits(1.1f); // see Float API, there are actually 2 options 

然后使用shift将其分解为4个字节或8个字节,就像你一样

同样基于Shazin解决方案,还有关于字节顺序的附加规范:

 ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putFloat(value).array(); 

要么

 ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putFloat(value).array(); 

我看不到易于使用的方法。 有用:

 public static byte[] toByteArray(float value) { byte[] bytes = new byte[4]; ByteBuffer.wrap(bytes).putFloat(value); return bytes; } public static float toFloat(byte[] bytes) { return ByteBuffer.wrap(bytes).getFloat(); }