php字符串和2进制互相转换
博客专区 > fxhover 的博客 > 博客详情
php字符串和2进制互相转换
fxhover 发表于5年前
php字符串和2进制互相转换
  • 发表于 5年前
  • 阅读 710
  • 收藏 2
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 两种方法实现字符串和2进制互相转换,支持中英混合。
第一种:
function strtobin($str){
    //1.列出每个字符
    $arr = preg_split('/(?<!^)(?!$)/u', $str);
    //2.unpack字符
    foreach($arr as &$v){
        $temp = unpack('H*', $v);
        $v = base_convert($temp[1], 16, 2);
        unset($temp);
    }

    return join(' ',$arr);
}

function bintostr($str){
    $arr = explode(' ', $str);
    foreach($arr as &$v){
        $v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));
    }

    return join('', $arr);
}

echo bintostr(strtobin('hello, 你好啊!'));
第二种方法:
function str2bin($str = ''){
    $bin_arr = array();
    $str_arr = preg_split('//u', $str, 0, PREG_SPLIT_NO_EMPTY);
    foreach ($str_arr as $val) {
        if (ord($val) > 127) {
            $bin_arr[] = base_convert(str_replace('%', '', urlencode($val)), 16, 2);
        } else {
            $bin_arr[] = decbin(ord($val));
        }
    }
    return implode(' ', $bin_arr);
}

function bin2str($bin_str = ''){
    $str = '';
    $bin_str = explode(' ', $bin_str);
    foreach ($bin_str as $val) {
        if (bindec($val) < 127) {
            $str .= chr(bindec($val));
        } else {
            $str .= urldecode('%' . implode('%', str_split(base_convert($val, 2, 16), 2)));
        }
    }
    return $str;
}
echo bin2str(str2bin('hello, 你好啊!'));

共有 人打赏支持
粉丝 7
博文 62
码字总数 70879
作品 1
×
fxhover
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: