如何将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(); }