使用Java解压缩二进制php打包的float

我使用php函数
pack
创建了一些二进制数据。 然后,我需要从Java应用程序中解压缩此数据。我已经能够解压缩整数,字符串,long和其他数据类型,但是我对浮点数感到麻烦。 我使用以下代码从php创建数据
pack(\"f\", 189.0);
然后在Java中,我从
DataInputStream
对象使用the2ѭ方法,但是我得到的值很小且不连贯。 显然,php和java使用不同的表示法来表示浮点数。 如何解决此问题并执行从php打包浮点到本机Java浮点的转换?     
已邀请:
        似乎pack函数不是创建标准float二进制表示形式的最佳选择,因为您既不能指定字节序,也不能保证使用哪种表示形式。 这可能会在较不常见的机器或配置上(甚至在常见的情况下)导致细微或较少细微的错误(我假设php也使用IEEE 754,但未指定afaik!),但是最可能的问题是java假定较大字节序,并且您获得的数据几乎没有字节序编码。 您可以自己进行转换(不是那么困难,基本上是一个琐碎的包装器),也可以使用nio类(即ByteBuffer)在其中指定字节顺序。 不知道php是否具有某些具有更多保证的功能(我敢肯定有些东西),但是如果您使用一些较大的软件包并且损失一些准确性,则可以传输字符串-这样可以避免这些问题。     
        我能够使用以下代码解决我的问题:字节转换为浮点(php) 我在Java中创建了以下实用程序方法,它与DataInputStreams配合得很好:
protected static float readFloat(DataInputStream stream) throws IOException
{
    byte byte0 = stream.readByte();
    byte byte1 = stream.readByte();
    byte byte2 = stream.readByte();
    byte byte3 = stream.readByte();

    int i = (byte3 & 0xff) << 24 | (byte2 & 0xff) << 16 | (byte1 & 0xff) << 8 | byte0 & 0xff; 
    return Float.intBitsToFloat(i);
}
    

要回复问题请先登录注册