繁体   English   中英

从Java中的字节解码实数

[英]Decoding a real number from bytes in Java

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

码:

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

measurement = packetBufferLittleEnd.getFloat();

更新:我浏览了SO,找到了另一篇可能为您提供解决方案的文章。 检查此链接: 如何将4字节数组转换为Java中的float


如果尝试用2's-补码表示有符号整数,则所有正数均表示为其无符号版本。
但是,要在2的补码中获得负值 ,您必须执行以下步骤:

  1. 反转数字的所有位
  2. 将二进制1添加到倒数。

在以下示例中对此进行了演示...

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

1 in 2's-补码: 0000 0000 0000 0000 0000 0000 0000 0000 0001

-1 in 2's-补码:

  • 反转无符号表示的所有位 :1111 1111 1111 1111 1111 1111 1111 1110
  • 加二进制1 :1111 1111 1111 1111 1111 1111 1111 1111 (这是-1 in 2's-补码)

对于浮点数,此过程比较耗时。 您必须利用IEEE 754标准转换过程在数字的以10为基数到以2为基数之间进行转换。 这就是您需要将带符号的数字从二进制转换为十进制表示形式的想法。 与IEEE 754相互转换

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM