如何从Java中的无符号字节浮点数?

时间:2011-10-13 18:07:19

标签: java floating-point byte unsigned

我正在与某些设备进行通信,此设备将数据作为无符号字节发送给我。我需要将这些字节转换为Java中的float。有什么办法吗?

非常感谢。

3 个答案:

答案 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);

你应该花2秒时间搜索谷歌。 http://www.google.com/#sclient=psy-ab&hl=en&source=hp&q=java%2C+byte+array+to+float&pbx=1&oq=java%2C+byte+array+to+float&aq=f&aqi=g1&aql=&gs_sm=e&gs_upl=679l4845l0l4941l25l18l0l0l0l0l299l3512l0.10.8l18l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=68fe21dd632e9a4e&biw=1024&bih=607