如何在Java中将浮点数转换为4个字节?

use*_*152 12 java byte converter

我无法转换这样的东西:

byte[] b = new byte[] { 12, 24, 19, 17};
Run Code Online (Sandbox Code Playgroud)

进入这样的事情:

float myfloatvalue = ?;
Run Code Online (Sandbox Code Playgroud)

有人可以举个例子吗?

另外如何将浮动转回字节?

Tom*_*icz 37

byte[] - > float

ByteBuffer:

byte[] b = new byte[]{12, 24, 19, 17};
float f =  ByteBuffer.wrap(b).getFloat();
Run Code Online (Sandbox Code Playgroud)

float - > byte[]

反向操作(知道上面的结果):

float f =  1.1715392E-31f;
byte[] b = ByteBuffer.allocate(4).putFloat(f).array();  //[12, 24, 19, 17]
Run Code Online (Sandbox Code Playgroud)

  • +1您可能还需要使用`.order(ByteBuffer.LITTE_ENDIAN)`设置字节顺序. (6认同)
  • +1老实说,ByteBuffer是一个未充分利用且不被重视的课程. (3认同)

Rei*_*eus 17

byte[]- > float,您可以这样做:

byte[] b = new byte[] { 12, 24, 19, 17};
float myfloatvalue = ByteBuffer.wrap(b).getFloat();
Run Code Online (Sandbox Code Playgroud)

以下是ByteBuffer.allocate用于转换的替代方法float- > byte[]:

int bits = Float.floatToIntBits(myFloat);
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)

  • 次要问题,ByeBuffer 以大端编码,当前示例是小端编码。让他们匹配会很棒!泰! (2认同)