从Java中的字节解码实数

时间:2015-03-16 01:24:05

标签: java bytebuffer

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

代码:

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

measurement = packetBufferLittleEnd.getFloat();

1 个答案:

答案 0 :(得分:-1)

<强>更新 我浏览了S.O.并找到了另一篇可能为您提供解决方案的帖子。请检查此链接:How to convert 4 bytes array to float in java


如果尝试在2-Complement中表示有符号整数,则所有正数都表示为其无符号版本。
但是,要在2-Complement中获得负值,您必须按照以下步骤操作:

  1. 反转该号码的所有位
  2. 将二进制1添加到反转数字。
  3. 以下示例演示了这一点......

    1为无符号,32位: 0000 0000 0000 0000 0000 0000 0000 0001

    1 in 2-Complement: 0000 0000 0000 0000 0000 0000 0000 0001

    -1 in 2-Complement:

    • 反转无符号表示的所有位:1111 1111 1111 1111 1111 1111 1111 1110
    • 添加二进制1 :1111 1111 1111 1111 1111 1111 1111 1111 (在2-Complement中为-1)

    对于浮点数,该过程更耗时。您必须使用IEEE 754标准转换过程来转换为数字的基数10和基数2表示。这就是你需要将有符号数字从二进制转换为十进制表示。Converting to/from IEEE 754