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

时间:2013-01-31 06:22:09

标签: java

我正在尝试将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)
    };
}

5 个答案:

答案 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>