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