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

对接硬件当中常用的函数

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

北溟有鱼QAQ博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论