有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

bytebuffer在Java中从字节解码实数

我有一个与安卓应用程序通信的传感器。该应用程序将从传感器接收的字节收集到字节缓冲区中。其中一个传感器读数的文档说明,该值是一个占用4字节的实数变量,因此对于该值,我在缓冲区中执行getFloat()。然而,我得到的值太小,不可能是正确的,但它们与其他正确的测量值有很好的相关性。我已经检查了字节顺序,它是正确的。请注意,其他值的记录更具体,例如32位无符号整数。在Java中,还有其他方法可以将4字节解码为实际值吗

代码:

ByteBuffer packetBufferLittleEnd = ByteBuffer.wrap(finalPacket).order(ByteOrder.LITTLE_ENDIAN);

measurement = packetBufferLittleEnd.getFloat();

共 (1) 个答案

  1. # 1 楼答案

    更新: 我浏览了S.O.并找到了另一篇可能给你答案的帖子。检查此链接:How to convert 4 bytes array to float in java


    如果试图在2的补码中表示有符号整数,则所有正数都表示为其无符号版本
    然而,要在2的补码中得到一个负值,必须遵循以下步骤:

    1. 反转数字的所有位
    2. 在倒过来的数字上加一个二进制1

    下面的例子说明了这一点

    1为无符号32位: 0000 0000 0001

    1/2的补语: 0000 0000 0001

    -1/2的补语:

    • 反转无符号表示的所有位:1111111111111111111111111111111111111110
    • 添加二进制1:1111111111111111111111111111111111111111(这是2的补码中的-1)

    对于浮点数来说,这个过程更耗时。必须利用IEEE 754标准转换过程,将数字的以10为基数转换为以2为基数。这就是将有符号数字从二进制转换为以10为基数的表示形式所需要的Converting to/from IEEE 754