如何从浮点数中获取byte []

时间:2011-05-17 07:16:05

标签: java math

如何从浮点数中获取byte []?我需要创建消息,其中数据我有四个字节,数据可以是unsigned int(很容易从int获取byte []),二进制和float(但我不知道如何从float中获取四个字节)。任何解决方案?

5 个答案:

答案 0 :(得分:14)

您可以使用Float.floatToRawIntBits(float),但我怀疑您不需要byte [],而是希望能够写入字节流。在这种情况下,我会使用DataOutputStream.writeFloat(float)

如果您正在使用NIO,则可以使用ByteBuffer.putFloat() ByteBuffer的一个优点是您可以使用ByteBuffer.order()指定ByteOrder,这样您就可以处理Big或Little端。

答案 1 :(得分:9)

java.lang.Float包含方法floatToIntBits()floatToRawIntBits(),您可以使用它们来获取float的位模式(作为int)。所以你可以这样做:

float value = 1.5e-3f;

int bits = Float.floatToIntBits(value);
byte[] bytes = new byte[4];
bytes[0] = (byte)(bits & 0xff);
bytes[1] = (byte)((bits >> 8) & 0xff);
bytes[2] = (byte)((bits >> 16) & 0xff);
bytes[3] = (byte)((bits >> 24) & 0xff);

注意:您必须找到适合您的特定应用程序的floatToIntBits()floatToRawIntBits()哪个是合适的,您必须确定您需要字节的顺序(小端或大端) )。

答案 2 :(得分:3)

如果不涉及任何数学运算,您可以通过DataOutputStream写入值然后获取结果输出来执行此操作:

ByteArrayOutputStream bos = new ByteArrayOutputStream(4);
DataOutputStream dos = new DataOutputStream(bos);
dos.writeFloat(yourFloat);
byte[] bytes = bos.toByteArray();
// at this point, your bytes will contain the 4-byte representation of the float.

答案 3 :(得分:1)

如果您认为获取int的字节很容易,Float.floatToIntBits可能就是您想要的:

float f = ...;
int i = Float.floatToIntBits(f);
byte[] floatBytes = toBytes(i);

答案 4 :(得分:1)

 public static void main(String[] args)
            {
                float f = 23f;
                byte[] op = new byte[4];
                int fi = Float.floatToIntBits(f);
                for (int i = 0; i < 4; i++)
                    {
                        int offset = (op.length - 1 - i) * 8;
                        op[i] = (byte) ((fi >>> offset) & 0xff);
                    }
                for(byte b : op)
                    {
                        System.out.format("0x%02X ", b);
                    }
            }