将 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。
我被困在如何逆转过程上。这部分有效:
$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。