java - 使用java解压二进制php packed float

标签 java php floating-point type-conversion pack

我使用 php 函数 pack 创建了一些二进制数据。 然后我需要从 Java 应用程序中解压这些数据。我已经能够解包整数、字符串、长整数和其他数据类型,但我在处理 float 时遇到了麻烦。

我使用如下代码从 php 创建数据

pack("f", 189.0);

然后在 Java 中,我使用 DataInputStream 对象的方法 readFloat(),但我得到的值很小且不连贯。

显然 php 和 java 使用不同的符号来表示 float 。 我该如何解决这个问题并执行从 php 打包的 float 到 native java float 的转换?

最佳答案

我能够使用以下代码解决我的问题:bytes convert to float (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);
}

关于java - 使用java解压二进制php packed float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432435/

相关文章:

java - 如何在项目中包含多个 log4j2.xml 文件?

php - CodeIgniter - 无法访问助手中的 session

php - 您如何动态显示用户配置文件?

numpy - scipy.optimize.curve_fit : not a proper array of floats error

java - 按对象字段对对象数组进行排序。如何制作比较器? Java/处理

java - 抽象类中的Spring数据@Transient

java - Heroku 性能衡量指标

javascript - 从基于 WordPress 构建的 ReactJS 应用程序发出 POST 请求

c - 特殊情况下浮点乘法的结合性

perl - 是否有将 c99 十六进制浮点符号转换为常规符号的 Perl 模块?