Php 将int-bytestream转换为float-bytestream

Php 将int-bytestream转换为float-bytestream,php,bit-manipulation,Php,Bit Manipulation,我有一个32位整数。位流实际上是32位浮点的位流(IEEE 754)。我试着用以下方法转换它: unpack('f', $input); 这会生成一个浮点数,但它似乎不是正确的数字 例如,如果我通过了1,我应该得到1.4012984e-45,根据, 但我带着2.5638762224389E-9来 非常感谢您的帮助/建议。您把事情弄糊涂了: <?php $s = "\x01\x00\x00\x00"; $t = "0001"; //same as "\x30\x30\x30\x31" va

我有一个32位整数。位流实际上是32位浮点的位流(IEEE 754)。我试着用以下方法转换它:

unpack('f', $input);
这会生成一个浮点数,但它似乎不是正确的数字

例如,如果我通过了1,我应该得到1.4012984e-45,根据, 但我带着2.5638762224389E-9来


非常感谢您的帮助/建议。

您把事情弄糊涂了:

<?php
$s = "\x01\x00\x00\x00";
$t = "0001"; //same as "\x30\x30\x30\x31"
var_dump(unpack('f', $s));
var_dump(unpack('f', $t));

Usenet拯救:我知道他们不一样。但是,我传入的$input不是字符串,而是数字。假设unpack('f',1')和unpack('f','\x01\x00\x00\x00')是等价的,我错了吗?(在little endian系统上,这是运行此代码的地方(x86/x64))@Goro unpack需要一个字符串,因此它将您传递的数字转换为字符串。PHP中的类型转换规则使int(1)=>string“1”。@Goro您可以使用pack和unpack的组合。无论系统的端部是什么,这都会起作用:
unpack('f',pack('L',1))
array(1) { [1]=> float(1.4012984643248E-45) } array(1) { [1]=> float(2.5638762224389E-9) }