JT808协议解析01

总体解析流程 (以经纬度为例)


1.通过 == bin2hex() == 方法, 将接收到的内容从ASCII字符转换为16进制的字符串(如:7e0200***)
2.将字符串已两个为一组分隔成字节数组,如: ['7E', '02', '00' ...], 这里对粘包需要特殊处理
3.选取下标为21-24的4组作为经度, 25到28的4组作为纬度
4.对经纬度解析: 如 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°附近
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容