Я имею то, что я думаю, что это IEEE754 с одинарной или двойной точностью (не уверен), и я хотел бы преобразовать его в десятичный на PHP.
Дано 4 шестнадцатеричных значения (которые могут быть в формате с прямым порядком байтов, поэтому в основном обратный порядок) 4A,5B,1B,05
Мне нужно преобразовать его в десятичное значение, которое, я знаю, будет очень близко к 4724.50073
,
Я пробовал некоторые онлайн-конвертеры, но они далеки от ожидаемого результата, поэтому я явно что-то упускаю.
Если я echo 0x4A;
я получил 74
а остальные 91
, 27
а также 5
, Не уверен, где его взять отсюда …
Чтобы преобразовать его в 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 или что угодно. К сожалению, проверить это невозможно, поскольку вы не указали широту и долготу.
Других решений пока нет …