将int bytestream转换为浮点字节流

时间:2010-06-18 22:37:32

标签: php bit-manipulation

我有一个32位整数。比特流实际上是32位浮点(IEEE 754)的比特流。我尝试将其转换为:

unpack('f', $input);

这会生成一个浮点数,但它似乎不是正确的数字

例如,如果我传入1,根据IEEE754 converter,我应该出现1.4012984e-45, 但我来的是2.5638762224389E-9

非常感谢任何帮助/建议。

1 个答案:

答案 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”。