hex — конвертировать 64-битное шестнадцатеричное в плавающее в переполнении стека

Я пытаюсь преобразовать 64-битное шестнадцатеричное число в число с плавающей точкой в ​​PHP.

40F82C719999999A

Если я запускаю это на странице преобразования IEEE-754 с плавающей точкой по адресу http://babbage.cs.qc.cuny.edu/IEEE-754.old/64bit.html он преобразуется в:

99015.100000000000

Какой номер я ищу. Но я не могу добраться до этого числа в PHP. Я пытался использовать различные комбинации pack () и unpack (), но я не близко. 🙁

2

Решение

function hex2float($strHex) {
$hex = sscanf($strHex, "%02x%02x%02x%02x%02x%02x%02x%02x");
$hex = array_reverse($hex);
$bin = implode('', array_map('chr', $hex));
$array = unpack("dnum", $bin);
return $array['num'];
}

$float = hex2float('40F82C719999999A');
echo $float;

вернет 99015.1

4

Другие решения

Как преобразовать обратно плавающий в 64-битный гекс:

function float2hex($num) {
$bin = pack("d", $num);
$hex = array_map('ord', str_split($bin));
$hex = array_reverse($hex);
$strHex = vsprintf("%02x%02x%02x%02x%02x%02x%02x%02x", $hex);
return $strHex;
}
$hex = float2hex(99015.100000000000);
echo strtoupper($hex);

вернется 40F82C719999999A

0

По вопросам рекламы [email protected]