2015-12-28 18 views
7

Tek veya çift kesinlikli (emin olmadığım) bir IEEE754 olduğunu düşündüğüm bir şey var ve bunu PHP'de ondalık sayıya dönüştürmek istiyorum.IEEE 754'ü ondalık kayan noktaya dönüştürün

Verilen 4 altıgen değeri (küçük endian biçiminde olabilir, bu nedenle temelde ters sırayla) 4A,5B,1B,054724.50073'a çok yakın olacağını bildiğim ondalık bir değere dönüştürmem gerekiyor.

Bazı çevrimiçi dönüştürücüler denedim, ancak beklenen sonuçtan çok uzaklar.

ben 74 almak echo 0x4A; ve diğerleri 91, 27 ve 5 edin. Buradan alınacak yeri değil ...

+0

Tam verileriniz nedir? – cmorrissey

+0

@cmorrissey GPS koordinatları olması gerekiyordu, dokümanlardaki açıklama "Tüm kayan nokta değerleri IEEE754 tek veya çift duyarlıklı olarak iletiliyor" diye anladım, bu tam değerleri biliyorum 4A, 5B, 1B, 05' '4724.50073' ise, oraya nasıl gidileceğinden emin değilim. – matt

+1

Onaltılık değerlerin yazışmasından ve verdiğiniz ondalık değerden emin misiniz? 4724.50073 'ün ikili gösterimi sırasında, noktadan sonra ondalık sayıları alıp almamanıza bakılmaksızın, art arda üç basamak vardır. Onları nasıl sipariş ederseniz edin, onaltılık sayılarda böyle bir ikili basamak dizisi yoktur. – trincot

cevap

1

Şamandıraya dönüştürmek için unpack kullanın. Bayt sırası yanlışsa, paketlemeden önce onu tersine çevirmeniz gerekir. 4 bayt (32 bit), genellikle çift için 8, bir float anlamına gelir.

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

bu tho doğrudan 4724.50073 eşleştiren nasıl herhangi bir şekilde görmüyorum. Daha fazla test verisi veya üretici el kitabı olmaksızın, bu soru tam olarak cevaplanamaz.

Spekülasyon: Koordinatın boyutundan yola çıkarak, muhtemelen WGS84'e veya ihtiyacınız olan her şeye dönüştürülebilen bir çeşit projeksiyon (XYZ veya mercator). Ne yazık ki, enlem ve boylamı sağlamadığınız için kontrol etmenin bir yolu yok.

İlgili konular