如何从浮点数获取byte[]?我需要创建一个消息,在数据中有四个字节,数据可以是无符号整数(从整数获取byte[]很容易),二进制和浮点数(但我不知道如何从浮点数获取四个字节)。 有什么解决方案吗?
您可以使用 Float.floatToRawIntBits(float)
方法,但我猜想您并不需要 byte[] 数组,而是希望能够将其写入字节流中。如果是这样的话,我建议您使用 DataOutputStream.writeFloat(float)
方法。
如果您正在使用 NIO,则可以使用 ByteBuffer.putFloat()
方法。ByteBuffer 的一个优点是您可以使用 ByteBuffer.order() 方法指定 ByteOrder,因此您可以处理大端序或小端序。
类 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()
哪个更合适,并确定您需要字节的顺序(小端或大端)。
不需要进行任何数学计算,您可以通过使用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.
如果你认为获取一个 int 的字节很容易,Float.floatToIntBits
或许是你想要的:
float f = ...;
int i = Float.floatToIntBits(f);
byte[] floatBytes = toBytes(i);
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);
}
}