總體解析流程 (以經(jīng)緯度為例)
1.通過 == bin2hex() == 方法, 將接收到的內容從ASCII字符轉換為16進制的字符串(如:7e0200***)
2.將字符串已兩個為一組分隔成字節(jié)數(shù)組,如: ['7E', '02', '00' ...], 這里對粘包需要特殊處理
3.選取下標為21-24的4組作為經(jīng)度, 25到28的4組作為緯度
4.對經(jīng)緯度解析: 如 01 5a 49 ea
// 1.先是將16進制轉換為10進制
$a = base_convert("01", 16, 10); // => 1
$b = base_convert("5a", 16, 10); // => 90
$c = base_convert("49", 16, 10) ; //=> 73
$d = base_convert("ea", 16, 10); // => 234
// 2.將結果位運算后相加 (第一個左移24次, 第二個左移16次, 第三個左移8次, 第四個不變)
$result = ($a << 24) + ($b << 16) + ($c << 8) + $d
左移: 二進制世界里往左移動其實是相當于乘以了2
等同于: $result = (1 << 24) + (90 << 16) + (73 << 8) + 234
等同于: $result = (1 * 2 ^24) + (90 * 2^16) + (73 * 2 ^8) + 234
等同于: $result = 16777216 + 5898240 + 18688 + 234
$result = 22694378
除以10^6 即是 22.694378 , 北緯 22.69°附近