在上一篇Laravel如何优雅的使用Swoole中我已经大概谈到了Laravel结合Swoole的用法。今天,我参与的智能家居项目基本上已经结束了Web服务器及android端的开发(熬了个通宵突击把剩下的做了,好累), 趁热来聊聊基于Laravel+Swoole开发智能家居后端的关键技术点。
16进制ASCII码协议的解析##
硬件结构图
硬件我不谈,我只需要关心数据解析。如何基于Swoole如果在php中解析16进制的ascii码,这种文章还比较少呢。但核心的部分还是可以整理出来的,关键用到的就是chr()、hexdec()、bin2hex()这3个函数,网上还提到了用pack()、unpack(),因为前面3个函数以及很好的解决了问题,所以就没有继续深入。我建议在这里Php Manual官网先熟悉下这几个函数。
chr()函数从不同的 ASCII 值返回字符,hexdec() 函数把十六进制转换为十进制。通常结合这两个函数把16进制字符串转换为ASCII字符串,理解起来有点绕。
例如: echo chr(hexdec('fe'));//输出的就是下位机能认识的16进制的FE,大小写不敏感
bin2hex()函数把 ASCII 字符的字符串转换为十六进制值,用于从Swoole中读取数据的转换。
例如:$buffer = str_split(bin2hex($data), 2);//$data是Swoole中OnReceive事件传递的值
在解析协议时,上例中的$buffer数组中,存放了协议的每一位。那么怎么解析呢