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

Alm*_*ani 4 java math

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

Pet*_*rey 14

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

如果你正在使用NIO,您可以使用ByteBuffer.putFloat() 字节缓冲区的一个好处是,你可以指定ByteBuffer.order()一个字节顺序,因此您可以处理任何一种或大或小尾数.

  • +1,这是在数据连接上写入浮点数的最佳解决方案. (2认同)

Jes*_*per 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);
Run Code Online (Sandbox Code Playgroud)

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


gus*_*afc 1

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

float f = ...;
int i = Float.floatToIntBits(f);
byte[] floatBytes = toBytes(i);
Run Code Online (Sandbox Code Playgroud)