前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP对接硬件当中用到的函数

PHP对接硬件当中用到的函数

作者头像
北溟有鱼QAQ
发布2019-12-18 17:35:05
1.6K0
发布2019-12-18 17:35:05
举报
文章被收录于专栏:北溟有鱼QAQ北溟有鱼QAQ

对接硬件当中常用的函数

1、对接8266中使用的CRC16加密函数

	function crc16Modbus($str)
    {	//pack — 将数据打包成二进制字符串
        $data = pack('H*', $str);
        $crc = 0xFFFF;
        for ($i = 0; $i < strlen($data); $i++) {
			//ord —— 串第一个字节为 0-255 之间的值
            $crc ^= ord($data[$i]);
            for ($j = 8; $j != 0; $j--) {
                if (($crc & 0x0001) != 0) {
                    $crc >>= 1;
                    $crc ^= 0xA001;
                } else $crc >>= 1;
            }
        }
		//sprintf —— 返回格式化的字符串
        return sprintf('%04X', $crc);
    }

2、字符串转16进制

function strToHex($str){
        $hex="";
        for($i=0;$i<strlen($str);$i++){
		//str_pad 使用另一个字符串填充字符串为指定长度
		//dechex 十进制转换为十六进制
            $hex.=str_pad(dechex(ord($str[$i])), 2, "0", STR_PAD_LEFT);

        }
        return strtoupper($hex);
    }

3、10进制转16进制并补0

function decToHex($num)
    {
	//base_convert 在任意进制之间转换数字
        $str = strtoupper(base_convert($num,10,16));
        return str_pad($str, 8, "0", STR_PAD_LEFT);
    }

4、16进制转字符串

function hexToStr($hex)
    {
        $string="";
        for($i=0;$i<strlen($hex)-1;$i+=2){
		//chr 返回指定的字符
		//hexdec 十六进制转换为十进制
            $string.=chr(hexdec($hex[$i].$hex[$i+1]));
        }
        return  $string;
    }

5、以及一些其他的PHP函数

将二进制转为16进制
bin2hex ( string $str ) : string
将十六进制字符串为二进制字符串
hex2bin ( string $data ) : string
字符串替换
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed
将字符串转换为数组
str_split ( string $string [, int $split_length = 1 ] ) : array
踩坑:16进制不能将一个大串直接转换为16进制,这样不是很准确,应该两位两位分开转换为16进制 如:113000,直接转为为16进制是1b968 两位分开转0B1E00
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对接硬件当中常用的函数
    • 踩坑:16进制不能将一个大串直接转换为16进制,这样不是很准确,应该两位两位分开转换为16进制 如:113000,直接转为为16进制是1b968 两位分开转0B1E00
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档