我正在尝试将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)
};
}
答案 0 :(得分:51)
请改用它们。
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();
}
答案 1 :(得分:10)
只是添加另一个基于@shazin解决方案的有用的方法。将float数组转换为字节数组:
public static byte[] FloatArray2ByteArray(float[] values){
ByteBuffer buffer = ByteBuffer.allocate(4 * values.length);
for (float value : values){
buffer.putFloat(value);
}
return buffer.array();
}
答案 2 :(得分:6)
它不会工作。 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个字节,就像你做的那样
答案 3 :(得分:5)
同样基于Shazin解决方案,还有关于字节顺序的附加规范:
ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putFloat(value).array();
或
ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putFloat(value).array();
答案 4 :(得分:1)
我看不到易于使用的方法。它有效:
<script type="text/javascript" src="path of your jquery.js file + your jquery file name " ><script>