PHP unpack float返回意外的答案

时间:2018-05-27 14:34:54

标签: php floating-point binary hex unpack

我有某种二进制数据。我尝试从该数据中获取 Float 。我们已经拥有该程序的 Java版本。所以我们已经知道应该得到什么结果。当我们尝试使用以下Php代码时,结果不是我们预期的结果。

以下是我使用的代码:

$readData = fread($stream, 4);
var_dump(unpack("f*", $readData)[1]); // -23944359936 wrong one

但如果我尝试从该二进制文件中首先获取十六进制并将该十六进制转换为 Float ,我们会得到预期的结果。

$readData = fread($stream, 4);
var_dump(self::hexTo32Float(bin2hex($readData))); // 0.22529149055481

public static function hexTo32Float($strHex) {
        $v = hexdec($strHex);
        $x = ($v & ((1 << 23) - 1)) + (1 << 23) * ($v >> 31 | 1);
        $exp = ($v >> 23 & 0xFF) - 127;
        return $x * pow(2, $exp - 23);
}

根据我的理解,他们应该产生相同的结果。有什么我想念的吗?

0 个答案:

没有答案