bytebuffer在Java中从字节解码实数
我有一个与安卓应用程序通信的传感器。该应用程序将从传感器接收的字节收集到字节缓冲区中。其中一个传感器读数的文档说明,该值是一个占用4字节的实数变量,因此对于该值,我在缓冲区中执行getFloat()。然而,我得到的值太小,不可能是正确的,但它们与其他正确的测量值有很好的相关性。我已经检查了字节顺序,它是正确的。请注意,其他值的记录更具体,例如32位无符号整数。在Java中,还有其他方法可以将4字节解码为实际值吗
代码:
ByteBuffer packetBufferLittleEnd = ByteBuffer.wrap(finalPacket).order(ByteOrder.LITTLE_ENDIAN);
measurement = packetBufferLittleEnd.getFloat();
# 1 楼答案
更新: 我浏览了S.O.并找到了另一篇可能给你答案的帖子。检查此链接:How to convert 4 bytes array to float in java
如果试图在2的补码中表示有符号整数,则所有正数都表示为其无符号版本
然而,要在2的补码中得到一个负值,必须遵循以下步骤:
下面的例子说明了这一点
1为无符号32位: 0000 0000 0001
1/2的补语: 0000 0000 0001
-1/2的补语:
对于浮点数来说,这个过程更耗时。必须利用IEEE 754标准转换过程,将数字的以10为基数转换为以2为基数。这就是将有符号数字从二进制转换为以10为基数的表示形式所需要的Converting to/from IEEE 754