123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/9/3
- * Time: 8:46 PM
- */
- namespace App\Handlers;
- trait ToolsHandler
- {
- public static function stitching($arr, $offset, $length = false)
- {
- if ($length === false) return implode('', array_slice($arr, $offset));
- return implode('', array_slice($arr, $offset, $length));
- }
- /**
- * 处理状态信息
- *
- * @param $status string
- * @return array
- * @author Fx
- *
- */
- public static function handleStatus($status, $offset = 0, $len = 11)
- {
- $data = self::handleU4($status);
- $data = array_slice($data, $offset, $len);
- $res = [
- 'bike_lock' => $data[0],
- 'guard_lock' => $data[1],
- 'rear_wheel_lock' => $data[2],
- 'backseat_lock' => $data[3],
- 'lamp_status' => $data[4],
- 'battery_lock' => $data[5],
- 'rear_wheel_motion' => $data[6],
- 'is_motion' => $data[7],
- 'location_type' => $data[8],
- 'backseat_status' => $data[9],
- 'order_status' => $data[10],
- ];
- return $res;
- }
- /**
- * 解析u1
- *
- * @param $u1
- * @return array
- * @author Fx
- *
- */
- public static function handleU1($u1)
- {
- $str2 = base_convert($u1, 16, 2);
- $u1_bin = str_pad($str2, 8, 0, STR_PAD_LEFT);
- $data = str_split(str_replace(' ', '', trim($u1_bin)));
- return array_reverse($data);
- }
- /**
- * 解析u2
- *
- * @param $u2
- * @return array
- * @author Fx
- *
- */
- public static function handleU2($u2)
- {
- $str2 = base_convert($u2, 16, 2);
- $u2_bin = str_pad($str2, 16, 0, STR_PAD_LEFT);
- $data = str_split(str_replace(' ', '', trim($u2_bin)));
- return array_reverse($data);
- }
- public static function handleI2($i2)
- {
- $str10 = base_convert($i2, 16, 10);
- if ($str10 > 32767) {
- return $str10 - (32768 * 2);
- } else {
- return $str10;
- }
- }
- /**
- * 解析u4
- *
- * @param $u4
- * @return array
- * @author Fx
- *
- */
- public static function handleU4($u4)
- {
- // $u4 = hexdec($u4);
- // $u4_bin = self::decto_bin([$u4], 2);
- $str2 = base_convert($u4, 16, 2);
- $u4_bin = str_pad($str2, 32, 0, STR_PAD_LEFT);
- $data = str_split(str_replace(' ', '', trim($u4_bin)));
- // var_dump($data);
- return array_reverse($data);
- }
- public static function formatCoordinate($val)
- {
- return $val / 1000000;
- }
- /**
- *十进制转二进制、八进制、十六进制 不足位数前面补零*
- *
- * @param array $datalist 传入数据array(100,123,130)
- * @param int $bin 转换的进制可以是:2,8,16
- * @return array 返回数据 array() 返回没有数据转换的格式
- */
- public static function decto_bin($datalist, $bin)
- {
- static $arr = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F');
- if (!is_array($datalist)) $datalist = array($datalist);
- if ($bin == 10) return $datalist; //相同进制忽略
- $bytelen = ceil(16 / $bin); //获得如果是$bin进制,一个字节的长度
- $aOutChar = array();
- foreach ($datalist as $num) {
- $t = "";
- $num = intval($num);
- if ($num === 0) continue;
- while ($num > 0) {
- $t = $arr[$num % $bin] . $t;
- $num = floor($num / $bin);
- }
- $tlen = strlen($t);
- if ($tlen % $bytelen != 0) {
- $pad_len = $bytelen - $tlen % $bytelen;
- $t = str_pad("", $pad_len, "0", STR_PAD_LEFT) . $t; //不足一个字节长度,自动前面补充0
- }
- $aOutChar[] = $t;
- }
- return $aOutChar;
- }
- }
|