我有一个32位整数。比特流实际上是32位浮点(IEEE 754)的比特流。我尝试将其转换为:
unpack('f', $input);
这会生成一个浮点数,但它似乎不是正确的数字
例如,如果我传入1,根据IEEE754 converter,我应该出现1.4012984e-45, 但我来的是2.5638762224389E-9
非常感谢任何帮助/建议。
答案 0 :(得分:0)
你让事情变得混乱:
<?php
$s = "\x01\x00\x00\x00";
$t = "0001"; //same as "\x30\x30\x30\x31"
var_dump(unpack('f', $s));
var_dump(unpack('f', $t));
给出
array(1) { [1]=> float(1.4012984643248E-45) } array(1) { [1]=> float(2.5638762224389E-9) }
根据手册,这些结果无法保证(unpack
中的“f”修饰符将取决于系统的endianness)。但有一件事是一个字节流实际上有这些值,而另一件事就是有一个字节流,当考虑ASCII字符集时恰好会转换为“0001”。