将 4 个字节解包为 PHP 中的浮点数

unpacking 4 bytes into a float in PHP

我被困在如何逆转过程上。这部分有效:

$ar = unpack("C*", pack("f", -4));

array:4 [▼
  1 => 0
  2 => 0
  3 => 128
  4 => 192
]

# in hex
array:4 [▼
  1 => "00"
  2 => "00"
  3 => "80"
  4 => "c0"
]

现在我想做相反的事情:我有一个十六进制字符串“000080c0”,我想将它解压成一个浮点数,结果为 -4。我如何在 PHP 中做到这一点?

谢谢。

您可以将字符串拆分为 2 个十六进制字符(1 个字节)的组,并将它们转换为十进制值。

然后,你只需要unpack/pack得到最后的浮点数。

要使用 pack(),您可以使用 splat 运算符 (...) 来解包函数参数中的数组值。

$src = '000080c0';

// get ['00','00','80','C0']
$arr = array_map('hexdec', str_split($src, 2));

// pack as bytes, unpack as float
$float = unpack('f', pack("C*", ...$arr));

var_dump($float[1]); // float(-4)

看到一个working example