Преобразовать IEEE 754 в десятичную с плавающей запятой

Я имею то, что я думаю, что это IEEE754 с одинарной или двойной точностью (не уверен), и я хотел бы преобразовать его в десятичный на PHP.

Дано 4 шестнадцатеричных значения (которые могут быть в формате с прямым порядком байтов, поэтому в основном обратный порядок) 4A,5B,1B,05 Мне нужно преобразовать его в десятичное значение, которое, я знаю, будет очень близко к 4724.50073,

Я пробовал некоторые онлайн-конвертеры, но они далеки от ожидаемого результата, поэтому я явно что-то упускаю.

Если я echo 0x4A; я получил 74 а остальные 91, 27 а также 5, Не уверен, где его взять отсюда …

8

Решение

Чтобы преобразовать его в float, используйте unpack, Если порядок следования байтов неверен, перед распаковкой вам придется самостоятельно поменять его. 4 байта (32 бита) обычно означают, что это число с плавающей запятой, 8 для двойного.

$bin = "\x4A\x5B\x1B\x05";
$a = unpack('f', strrev($bin));
echo $a[1];  // 3589825.25

Я не понимаю, каким образом это соответствует 4724.50073 прямо Без каких-либо дополнительных данных испытаний или руководства производителя этот вопрос не может быть полностью подотчетен.

Предположение: судя по размеру координаты, это, вероятно, какая-то проекция (XYZ или mercator), которую затем можно преобразовать в WGS84 или что угодно. К сожалению, проверить это невозможно, поскольку вы не указали широту и долготу.

2

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

Других решений пока нет …

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