我正在与某些设备进行通信,此设备将数据作为无符号字节发送给我。我需要将这些字节转换为Java中的float。有什么办法吗?
非常感谢。
答案 0 :(得分:5)
是。 Float.intBitsToFloat
将32位作为int并将其转换为float。
首先需要做的就是使用正常移位和/或适合数据字节顺序的操作将四个字节转换为int
。例如,
float f = Float.intBitsToFloat(
(barr[0] & 0xff)
| ((barr[1] & 0xff) << 8)
| ((barr[2] & 0xff) << 16)
| ((barr[7] & 0xff) << 24));
您还可以使用FloatBuffer
,具体取决于您接收数据的方式。
public abstract FloatBuffer asFloatBuffer()
将此字节缓冲区的视图创建为浮点缓冲区。
注意,“设备[是]将数据作为无符号字节发送”不是真的。数据向您发送字节,Java将它们表示为 signed 字节。 Java没有无符号字节类型。
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
byte :字节数据类型是 8位带符号二进制补码整数。它的最小值为-128,最大值为127(含)。
答案 1 :(得分:0)
如何abt http://download.oracle.com/javase/1.4.2/docs/api/java/io/DataInputStream.html#readFloat()?
虽然我通常会查找它是如何实现的,然后自己动手以避免任何开销。
答案 2 :(得分:0)
Float.intBitsToFloat(int bits);
要获取int,只需将数组的字节连接成一个整数
即可大端:
int myInt = (byte[0] << 24) |
((byte[1] & 0xff) << 16) |
((byte[2] & 0xff) << |
(byte[3] & 0xff);
小端:
int myInt = (byte[3] << 24) |
((byte[2] & 0xff) << 16) |
((byte[1] & 0xff) << |
(byte[0] & 0xff);