WithCoderWithCoderWithCoder

PHP二进制与字符串之间的相互转换

    在之前的文章中,介绍了PHP的 pack() 和 unpack() 函数。本文在前面的基础上,介绍二进制与字符串之间的相互转换。

    将字符串转换为二进制

    基本思路:

        1. 将字符串拆分为单个字符数组

        2. 使用unpack函数,将字符解包为十六进制数字 

        3. 将十六进制数字,转换为二进制

    代码如下:       

/**
* 将字符串转换成二进制
* @param type $str
* @return type
*/
function StrToBin($str)
{
   // 1.列出每字符
   $arr = preg_split('/(?<!^)(?!$)/u', $str);
   // 2.unpack字符16
   foreach ($arr as &$v) {
       $temp = unpack('H*', $v);
       // 3.16转换为
           $v = base_convert($temp[1], 16, 2);
       unset($temp);
   }
   return join(' ', $arr);
}

    例,调用上面的方法,将指定字符串转换为二进制:    

echo StrToBin("hello,世界");

    结果输出如下(PHP中1个中文字符使用3个字节表示):

1101000 1100101 1101100 1101100 1101111 111011111011110010001100 111001001011100010010110 111001111001010110001100

    二进制转换为字符串

    基本思路:

        1. 将给定二进制字符串,安装指定分隔符(如空格)拆分为数组

        2. 将单个二进制字符串,转换为十六进制数字

        3. 根据unpack解包使用的格式字符,利用pack使用同样的格式字符打包十六进制数字为字符

    代码如下:   

/**
* 将二进制转换成字符串
* @param type $str
* @return type
*/
function BinToStr($str)
{
   // 1.拆分二制字符串
   $arr = explode(' ', $str);
   foreach ($arr as &$v) {
       // 2. 转换为16
       $hex = base_convert($v, 2, 16);
       // 3.pack16字符
       $v = pack("H" . strlen($hex), $hex);
   }

   return join('', $arr);
}

    例,调用上面的方法,将前面转换的二进制转换为对于的字符串:        

echo BinToStr("1101000 1100101 1101100 1101100 1101111 111011111011110010001100 111001001011100010010110 111001111001010110001100");

    输出如下:   

hello,世界

欢迎分享交流,转载请注明出处:WithCoder » PHP二进制与字符串之间的相互转换